gpt4 book ai didi

java - 单击 JButton 时椭圆形不改变颜色 - Java Swing

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:37 26 4
gpt4 key购买 nike

我在 JFrame 中得到了 3 个 JPanel。两个用于 JButton,另一个用于绘图 Canvas 。我为每个 JButton 生成一个随机颜色,在 JPanel 中间画一个椭圆,每次点击 JButton 时,我都会更改椭圆的颜色。问题是颜色没有改变。

CirclePanel.java:

public class CirclePanel extends JPanel
{
private static final long serialVersionUID = 1L;

private Color color;

public Color getColor()
{
return this.color;
}

public void setColor(Color color)
{
this.color = color;
repaint();
}

public CirclePanel()
{

}

@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);

final int OVAL_WIDTH = this.getWidth() / 2;
final int OVAL_HEIGHT = this.getHeight() / 2;
final int xPosition = OVAL_WIDTH / 2;
final int yPosition = OVAL_HEIGHT / 2;

g.setColor(this.color);
g.fillOval(xPosition,yPosition,OVAL_WIDTH,OVAL_WIDTH);
}
}

RightPanel.java 和 LeftPanel.java:

public class RightPanel extends JPanel implements ActionListener
{
private static final long serialVersionUID = 1L;

private static final int BUTTONS = 6;

private CirclePanel circlePanel;

public RightPanel(CirclePanel circlePanel)
{
this.circlePanel = circlePanel;

this.setLayout(new GridLayout(BUTTONS,0));

// Adding buttons to the layout
for (int i = 0;i < RightPanel.BUTTONS;i++)
{
JButton button = new JButton();
button.setBackground(generateColor());
button.addActionListener(this);
this.add(button);
}

this.setVisible(true);
}

public Color generateColor()
{
Random random = new Random();
// 255 - maximum value. 0 - minimum value
int randomNumber1 = random.nextInt((255 - 0) + 1) + 0;
int randomNumber2 = random.nextInt((255 - 0) + 1) + 0;
int randomNumber3 = random.nextInt((255 - 0) + 1) + 0;
Color color = new Color(randomNumber1,randomNumber2,randomNumber3);
return color;
}

@Override
public void actionPerformed(ActionEvent e)
{
Color color = ((JButton)e.getSource()).getBackground();
this.circlePanel.setColor(color);
}
}

public class LeftPanel extends JPanel implements ActionListener
{
private static final long serialVersionUID = 1L;

private static final int BUTTONS = 6;

private CirclePanel circlePanel;

public LeftPanel(CirclePanel circlePanel)
{
this.circlePanel = circlePanel;

this.setLayout(new GridLayout(BUTTONS,0));

// Adding buttons to the layout
for (int i = 0;i < LeftPanel.BUTTONS;i++)
{
JButton button = new JButton();
button.setBackground(generateColor());
button.addActionListener(this);
this.add(button);
}

this.setVisible(true);
}

public Color generateColor()
{
Random random = new Random();
// 255 - maximum value. 0 - minimum value
int randomNumber1 = random.nextInt((255 - 0) + 1) + 0;
int randomNumber2 = random.nextInt((255 - 0) + 1) + 0;
int randomNumber3 = random.nextInt((255 - 0) + 1) + 0;
Color color = new Color(randomNumber1,randomNumber2,randomNumber3);
return color;
}

@Override
public void actionPerformed(ActionEvent e)
{
Color color = ((JButton)e.getSource()).getBackground();
this.circlePanel.setColor(color);
}
}

MyFrame.java:

public class MyFrame extends JFrame 
{
private static final long serialVersionUID = 1L;
private CirclePanel circlePanel;

public MyFrame()
{
super("paintComponent");

this.circlePanel = new CirclePanel();
this.setLayout(new BorderLayout());
this.setSize(400,400);
this.setResizable(false);
this.add(new LeftPanel(this.circlePanel),BorderLayout.WEST);
this.add(new RightPanel(this.circlePanel),BorderLayout.EAST);
this.add(new CirclePanel(),BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}

public static void main(String[] args)
{
new MyFrame();
}
}

我检查了程序是否访问了每个 actionPerformed() 方法,它确实访问了。

那么它有什么问题呢?

最佳答案

您显示的 CirclePanel 不是您传递给左/右面板的那个,请参阅:

this.add(new LeftPanel(this.circlePanel),BorderLayout.WEST);
this.add(new RightPanel(this.circlePanel),BorderLayout.EAST);
this.add(new CirclePanel(),BorderLayout.CENTER);

你可能想做:

this.add(new LeftPanel(this.circlePanel),BorderLayout.WEST);
this.add(new RightPanel(this.circlePanel),BorderLayout.EAST);
this.add(this.circlePanel,BorderLayout.CENTER);

关于java - 单击 JButton 时椭圆形不改变颜色 - Java Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35775253/

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