以下のコードのボタンは、ActionEvents をリッスンする必要がある唯一のオブジェクトですが、ウィンドウのサイズを変更すると、ボタンが押されたときにのみ発生するはずの円の色が変わります。
ウィンドウのサイズを変更するときに何らかの方法で frame.repaint() を使用して、 drawPanel オブジェクトの新しい値を生成するか、画面が新しいランダム値で表示されるたびに新しい drawPanel オブジェクトを作成しますか?
テスト.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test implements ActionListener {
JFrame frame;
JButton button;
public static void main (String[] args) {
Test gui = new Test();
gui.go();
}
public void go() {
frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Pressme!");
button.addActionListener(this);
MyPanelDraw drawPanel = new MyPanelDraw();
frame.getContentPane().add(BorderLayout.SOUTH, button);
frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
frame.setSize(300,300);
frame.setVisible(true);
}
public void actionPerformed (ActionEvent event) {
button.setText("Changed");
frame.repaint();
}
}
MyPanelDraw.java
import javax.swing.*;
import java.awt.*;
class MyPanelDraw extends JPanel {
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
Color startColor = new Color(red, green, blue);
red = (int) (Math.random() * 255);
green = (int) (Math.random() * 255);
blue = (int) (Math.random() * 255);
Color endColor = new Color(red,green, blue);
GradientPaint gradient = new GradientPaint(70,70,startColor, 150,150, endColor);
g2d.setPaint(gradient);
g2d.fillOval(40,70,100,100);
}
}