gpt4 book ai didi

Java swing 在 ContentPane 中交换 ImagePanel

转载 作者:行者123 更新时间:2023-11-29 10:20:07 25 4
gpt4 key购买 nike

我有一组要在 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);

ImagePanel 是:

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();
}
};

第一张图片按需要显示。单击给我白色,第二次单击时相同,第三次单击使我回到所需的第一张图像。如果我在两次点击白色之间点击 frame,就会出现第二和第三张图像,渲染后它会按预期工作。我错过了什么?

Ack,新手!毫无疑问,还有更好的方法...

谢谢

最佳答案

将两个面板放在 CardLayout 中.

关于Java swing 在 ContentPane 中交换 ImagePanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com