JButtonの画像をactionPerformedメソッド内で再描画
JButtonの画像をactionPerformedメソッド内で再描画したい。
以下のソースのようにして、再描画したいのです。
setIconメソッドではなく、
JButtonに対して描画したものに対して再描画したいです。
Graphics2DクラスについてJAVA APIで調べましたが、
仕組の理解に至りませんでした。
仕組みと方法を教えて頂きたいです。
よろしくお願いいたします。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class test extends JFrame implements ActionListener{
JButton b= new JButton();
public static void main(String a[]) {
new test();
}
public test() {
super();
this.setSize(100,100);
b.addActionListener(this);
b.add(new Zoom(new ImageIcon("img1.jpg"),0,0,50,50));
this.add(b);
this.setVisible(true);
}
class Zoom extends JComponent {
private static final long serialVersionUID = 1L;
private ImageIcon icon = null;
private int x = 0;
private int y = 0;
private int h = 0;
private int w = 0;
private double scale = 1.0d;
public Zoom(ImageIcon icon, int x, int y, int w, int h) {
super();
this.icon = icon;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.scale(scale, scale);
//////////////////////////////////
//画僧を再描画したい。
//g2.clearRect(0, 0, 80, 80);//×
g2.drawImage(icon.getImage(), x, y, w, h, this);
}
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b){
System.out.print("ok");
//this.repaint();//×
//b.repaint();//×
b.add(new Zoom(new ImageIcon("img2.jpg"),0,0,50,50));//(再描画できない)
//b.setIcon(new ImageIcon("img2.jpg"));//ok(再描画出来る)
}
}
}