我正在为学校做作业,但遇到了问题: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
}

10-08 18:08