Java 为什么即使单击按钮,JPanel的颜色也不会改变?
当我偶然发现这个问题时,我正在使用headfirstjava,我不知道如何解决它 单击按钮时,我想更改我的Java 为什么即使单击按钮,JPanel的颜色也不会改变?,java,swing,jpanel,Java,Swing,Jpanel,当我偶然发现这个问题时,我正在使用headfirstjava,我不知道如何解决它 单击按钮时,我想更改我的JPanel小部件的颜色我正在使用Mac OS import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SimpleGui implements ActionListener { JFrame frame; JButton button; public stati
JPanel
小部件的颜色我正在使用Mac OS
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleGui implements ActionListener {
JFrame frame;
JButton button;
public static void main(String[] args) {
SimpleGui gui = new SimpleGui();
gui.go();
} //close main
public void go() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("changes colour");
button.addActionListener(this);
MyPanel drawPanel = new MyPanel();
frame.getContentPane().add(BorderLayout.SOUTH,button);
frame.getContentPane().add(BorderLayout.CENTER,drawPanel);
frame.setSize(300, 300);
frame.setVisible(true);
} //close go
public void actionPerformed(ActionEvent event) {
frame.repaint();
button.setText("color changed");
}
} // close actionPerformed
// the widget whose color i want to change
class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.green); // i choose green as a color
g.fillRect(20, 50, 100, 100);
} //close paintComponent
} //close MyPanel
paintComponent
应为paintComponent
paintComponent
应为paintComponent
但在我点击按钮之前,JFrame窗口就有了绿色的矩形
这是因为您已经在paintComponent方法中硬编码了绿色。所以它永远是绿色的
类应该有一个属性来设置矩形的颜色。比如:
class MyPanel extends JPanel
{
private Color rectangleColor = getBackground();
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor( rectangleColor); // i choose green as a color
g.fillRect(20, 50, 100, 100);
}
public void setRectangleColor(Color rectangleColor)
{
this.rectangleColor = rectangleColor;
repaint();
}
}
然后在您使用的按钮的ActionListener中:
//frame.repaint();
drawPanel.setRectangleColor( Color.GREEN );
button.setText("color changed");
“drawPanel”变量也需要是类中的实例变量
现在有了这个设计,你可以有多个按钮。每个按钮都可以将矩形更改为不同的颜色
但在我点击按钮之前,JFrame窗口就有了绿色的矩形
这是因为您已经在paintComponent方法中硬编码了绿色。所以它永远是绿色的
类应该有一个属性来设置矩形的颜色。比如:
class MyPanel extends JPanel
{
private Color rectangleColor = getBackground();
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor( rectangleColor); // i choose green as a color
g.fillRect(20, 50, 100, 100);
}
public void setRectangleColor(Color rectangleColor)
{
this.rectangleColor = rectangleColor;
repaint();
}
}
然后在您使用的按钮的ActionListener中:
//frame.repaint();
drawPanel.setRectangleColor( Color.GREEN );
button.setText("color changed");
“drawPanel”变量也需要是类中的实例变量
现在有了这个设计,你可以有多个按钮。每个按钮都可以将矩形更改为不同的颜色。有一个输入错误:
paintComponent
应该是paintComponent
。在覆盖方法上使用@Override
注释,以确保操作正确。有一个输入错误:paintComponent
应该是paintComponent
。在重写方法上使用@Override
注释,以确保操作正确。我将paintComponent更改为paintComponent,但在我单击按钮之前JFrame窗口具有绿色矩形。我将paintComponent更改为paintComponent,但在我单击按钮之前JFrame窗口具有绿色矩形。