如何通过单击java中的按钮来更改图像

时间:2012-08-23 04:12:36

标签: java swing image-viewer

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

说我有两个图像缓冲。

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?

的延续

1 个答案:

答案 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);