Почему в моей панели / окне нет изображения? - PullRequest
1 голос
/ 06 июня 2011

что не так с моим кодом? Я просто хочу, чтобы в моем окне была картинка ...

//class ImagePanel:

public class ImagePanel extends JPanel {

    private static final long serialVersionUID = -7664761101121497912L;

    public Image i;

    public ImagePanel(Image i) {
        this.i = i;
    }

    @Override
    public void paintComponents(Graphics g) {
        super.paintComponent(g);        
        g.drawImage(this.i, 0, 0, null);
    }
}

//class Main

public class Main extends JFrame {

    public static void main(String[] args) {

    JFrame frame = new JFrame();
        frame.setSize(1024, 768);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        ImagePanel panel = null;

        try {
            panel = new ImagePanel(ImageIO.read(new File("D:/test.JPG")));
        } catch (IOException e) {
            e.printStackTrace();
        }

        frame.getContentPane().add(panel);
        frame.setVisible(true);
    }
}

есть просто окно без картинки :( В чем проблема? И есть ли простой способ установить размер окна == размер картинки?

Спасибо!

Ответы [ 4 ]

5 голосов
/ 06 июня 2011

Вы должны переопределить paintComponent(Graphics g) вместо paintComponent с (Graphics g).

4 голосов
/ 06 июня 2011

Лучшее решение - использовать JLabel.Не изобретай колесо.Вам не нужно делать пользовательские рисования.

Но если вы делаете пользовательские рисования, вам нужно переопределить метод getPreferredSize (), чтобы он соответствовал размеру изображения, чтобы менеджер макетов мог выполнять свою работу.1003 *

3 голосов
/ 06 июня 2011

пожалуйста, прочитайте этот урок о значке в Swing , и ваше изображение будет помещено в JLabel , но с такими же возможностями / функциями, что и в JPanel

0 голосов
/ 06 июня 2011

Я совсем не знаком с панелями Java, но вам не нужно устанавливать размер ImagePanel, прежде чем добавлять его на панель контента.

...