如何通过点击一个按钮在java中改变图像

如何通过点击一个按钮在java中改变图像

问题描述:

如果已经显示一个图像,通过点击一个按钮,我该如何改变它到另一个?如何通过点击一个按钮在java中改变图像

说我有两个图像缓冲。

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

,并显示我使用

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?

+3

你为什么不只是使用'setImageIcon(ImageIcon的)'按钮的方法? –

+0

最简单的方法是将它们用作未修饰按钮上的备用图标,如[本答案](http://*.com/a/7360696/418556)所示。 –

+0

@HarryJoy给我8秒。 ;) –

延续您需要申请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); 
+0

@sabbibJAVA不使用CardLayout – mKorbel