如果已经显示图像,通过单击按钮如何将其更改为另一个图像?
说我有两个图像缓冲。
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?
的延续答案 0 :(得分:3)
您需要申请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);