-1

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

假设我缓冲了两个图像。

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() 方法,但图像查看器本身现在根本不出现。

继续如何设置 JFrame 背景透明但 JPanel 或 JLabel 背景不透明?

4

1 回答 1

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);
于 2012-08-23T04:14:38.980 回答