gpt4 book ai didi

java - 为什么即使单击按钮,JPanel 的颜色也没有改变?

转载 作者:行者123 更新时间:2023-12-02 00:57:16 25 4
gpt4 key购买 nike

当我偶然发现这个问题时,我正在做 Head First Java,但我不知道如何解决它。

我想在单击按钮时更改 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

最佳答案

but the JFrame widow have green rectangle even before i click on the button.

那是因为您已经在 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”变量还需要是类中的实例变量。

现在,通过这种设计,您可以拥有多个按钮。每个按钮都可以将矩形更改为不同的颜色。

关于java - 为什么即使单击按钮,JPanel 的颜色也没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61202621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com