-1

すでに画像が表示されている場合、ボタンをクリックして別の画像に変更するにはどうすればよいですか?

2 つの画像がバッファリングされているとします。

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 に答える