Java Swa, меняющий ImagePanels в ContentPane - PullRequest
1 голос
/ 23 октября 2011

У меня есть набор изображений, которые я хочу представить в JFrame. Все они одинакового размера - каждое изображение заполняет JFrame. Я поменяю местами, между которыми виден стиль слоя:

    f = new JFrame("xx");
    f.setSize(480, 854);
    contentPane = f.getContentPane();
    ip1 = new ImagePanel(new File("assets/1.jpg"));
    ip2 = new ImagePanel(new File("assets/2.jpg"));
    ip3 = new ImagePanel(new File("assets/3.jpg"));
    f.setVisible(true);
    contentPane.add(ip1);
    contentPane.addMouseListener(mouseListener);

Панель изображений:

public class ImagePanel extends JPanel {
    private BufferedImage image;

    @Override
    public void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }

    public ImagePanel(File imageFile) {
        try {
            image = ImageIO.read(imageFile);
        } catch (IOException e) {
            System.out.println("Image could not be read: " + imageFile);
        }
        setVisible(true);
    }
}

И я пытаюсь переключаться между ними в MouseListener:

static MouseListener mouseListener = new MouseListener() {

    private int i = 1;

    @Override
    public void mouseClicked(MouseEvent e) {
        // logger.log(Level.INFO, e.toString());
        contentPane.removeAll();
        if (++i > 3) i = 1;
        switch (i) {
            case 1: contentPane.add(ip1); break;
            case 2: contentPane.add(ip2); break;
            case 3: contentPane.add(ip3); break;            
        }
        contentPane.repaint();
    }
};

Первое изображение отображается по желанию. Щелчок дает мне белое, и то же самое при втором щелчке, а третий возвращает меня к моему первому изображению по желанию. Если я нажимаю на рамку между щелчками на белом, появляются 2-е и 3-е изображения, и после их рендеринга они работают, как и ожидалось. Чего мне не хватает?

Ack, newbs! Без сомнения, есть гораздо лучший способ ...

спасибо

Ответы [ 2 ]

4 голосов
/ 23 октября 2011

поместите Images как Значок в JLabel ,

правил для Swing GUI

  • is JComponent (s) уже видимый
  • вы хотите поменять местами эти / эти объекты

тогда вам нужно позвонить

myLabel.setIcon(myIconn);
revalidate();
repaint();
4 голосов
/ 23 октября 2011

Поместите обе панели в CardLayout.

...