我正在做学校作业,但遇到了问题:P。 我得到了这个代码:
public void mouseEntered(MouseEvent e) {
MyPanel b = (MyPanel)e.getSource();
System.out.println("ID: "+b.getId()+"");
b.setColor(Color.blue);
}
在我得到的 MyPanel 对象中:
public void setColor(Color kleur) {
if(this.getBackground()==Color.white) {
this.setBackground(kleur);
repaint();
}
}
当我用鼠标进入面板时,我输入的颜色会闪烁。但我希望它保持颜色,这样我就可以在带有 500 个 Jpanels 的 Jform 中绘制一条轨迹(我已将它们添加到 ArrayList 中,但这部分工作得很好)
我做错了什么?
最佳答案
根据@ErickRobertson对此问题的评论,我猜问题如下:
您的MyPanel
替换了JPanel#paintComponents()
方法。那可能吗?如果是这样,您可以执行以下操作。在 MyPanel#setColor(Color)
方法中,您不设置背景,而是设置包含新背景颜色的字段:
private Color backgroundColor = Color.white;
public void setColor(Color kleur) {
backgroundColor = kleur;
repaint();
}
然后,在您的 MyPanel#paintComponents(Graphics)
中:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// draw background
g.setColor(backgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
// draw your stuff here
}
关于java - 为什么 JPanel 不会改变颜色并保持这种状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10996389/