Рисование изображения в JPanel в JFrame - PullRequest
9 голосов
/ 31 января 2012

Я разрабатываю программу, которая содержит два JPanels в JFrame, одна для хранения изображения, другая для хранения компонентов GUI (поля поиска и т. Д.).Мне интересно, как мне нарисовать изображение на первом JPanel в JFrame?

Вот пример кода из моего конструктора:

public UITester() {
    this.setTitle("Airplane");
    Container container = getContentPane();
    container.setLayout(new FlowLayout());
    searchText = new JLabel("Enter Search Text Here");
    container.add(searchText);
    imagepanel = new JPanel(new FlowLayout());
    imagepanel.paintComponents(null);
   //other constructor code

}

public void paintComponent(Graphics g){
    super.paintComponents(g);
    g.drawImage(img[0], -50, 100, null);
}

Я пытался переопределить метод paintComponent в JPanel для рисования изображения, но это вызывает проблему в моем конструкторе, когда я пытаюсь написать:

imagepanel.paintComponents(null);

Поскольку это позволит мне только передать метод null, а не Graphics g, кто-нибудь знает исправление этого метода или другой метод, который я могу использовать, чтобы нарисовать изображение в JPanel?Помощь приветствуется!:)

Всего наилучшего и заранее спасибо!Matt

Ответы [ 3 ]

14 голосов
/ 31 января 2012

Я хотел бы предложить более простой способ,

  image = ImageIO.read(new File(path));
  JLabel picLabel = new JLabel(new ImageIcon(image));

Yayy! Теперь ваше изображение является компонентом свинга! добавить его в рамку или панель или что-нибудь, как вы обычно делаете! Наверное, тоже нужно перекрасить, как

  jpanel.add(picLabel);
  jpanel.repaint(); 
7 голосов
/ 31 января 2012

Вы можете использовать JLabel.setIcon(), чтобы поместить изображение на JPanel, как показано здесь .

С другой стороны, если вы хотите иметь панель с фоном, вы можете взглянуть на этот учебник.

6 голосов
/ 31 января 2012

Нет необходимости вручную вызывать paintComponent() из конструктора.Проблема в том, что вы передаете нуль для Graphics объекта.Вместо этого переопределите paintComponent(), и вы используете объект Graphics, переданный методу, который вы будете использовать для рисования.Проверьте это учебник .Вот пример JPanel с изображением:

class MyImagePanel extends JPanel{ 
    BufferedImage image;
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        if(image != null){
            g.drawImage(image, 0, 0, this);
        }
    }
}
...