【问题标题】:How to change image with the click of a button in java如何通过单击Java中的按钮来更改图像
【发布时间】:2012-08-18 13:20:26
【问题描述】:

如果已经显示图像,单击按钮如何将其更改为另一个图像?

假设我缓冲了两个图像。

bi = ImageIO.read(new File("1.jpg");
bi2 = ImageIO.read(new File("2.jpg"));

并显示我正在使用的 bi

public void paint(Graphics g){
    super.paintComponent(g);

    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
    int w = ((int) dim.getWidth() / 2) - (bi.getWidth() / 2);
    int h = ((int) dim.getHeight() / 2) - (bi.getHeight() / 2);

    g.drawImage(bi, w, h, null);
}

我正在尝试这样做。

JButton b = new JButton("Change Image");
b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
        bi = bi2;
        paint(null);
    }
});

这将 bi 设置为一个新的图像和调用 paint() 方法,但图像查看器本身现在根本不出现。

how to set JFrame background transparent but JPanel or JLabel Background opaque?继续

【问题讨论】:

  • 为什么不直接使用setImageIcon(imageIcon)按钮的方法?
  • 最简单的方法是将它们用作未装饰按钮上的备用图标,如this answer所示。
  • @HarryJoy 赌我 8 秒。 ;)
  • @AndrewThompson 万岁!!!!!! :P
  • 如需尽快获得更好的帮助,请发帖SSCCE。请注意,public void paint(Graphics g){ super.paintComponent(g); 几乎肯定是错误的。当我看到 SSCCE 时会知道更多。

标签: java swing image-viewer


【解决方案1】:

您需要申请repaint

JButton b = new JButton("Change Image");
b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
        bi = bi2;
        //invalidate();
        repaint();
    }
});

可能还需要先调用invalidate 以允许重绘管理器将容器标记为重绘

如果您知道要绘制的区域(即旧区域和新区域),您可以致电paintImmediately

所以这样的事情也可以工作......

int w = ((int) dim.getWidth() / 2) - (bi.getWidth() / 2);
int h = ((int) dim.getHeight() / 2) - (bi.getHeight() / 2);
Rectangle oldArea = new Rectangle(w, h, bi.getWidth(), bi.getHeight());

bi = bi2;
w = ((int) dim.getWidth() / 2) - (bi.getWidth() / 2);
h = ((int) dim.getHeight() / 2) - (bi.getHeight() / 2);
Rectangle newArea = new Rectangle(w, h, bi.getWidth(), bi.getHeight());

Area area = new Area();
area.add(oldArea);
area.add(newArea);

Rectangle updateArea = area.getBounds();
paintImmediately(updateArea);

【讨论】:

  • @sabbibJAVA 不使用 CardLayout
猜你喜欢
  • 2019-12-03
  • 2020-12-30
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 2019-12-23
  • 1970-01-01
相关资源
最近更新 更多