java - 为什么 JPanel 不会改变颜色并保持这种状态?

标签 java swing jpanel

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

相关文章:

java - 在 Netbeans J2EE 项目中找不到服务方法

java - 重绘后如何继续在图像上绘画?

java - 如何动态更新java Canvas ?

java - 在 JPanel 中显示 JPanel 数组

java - 我可以只使用 Batik 库的转码器而不使用所有其他 Batik 代码和依赖项吗?

java - 查找后无法使用数据源

java - 按 [X] 按钮关闭 JFrame 不会调用 dispose 方法

java - 在一行中调整图像和文本

java - 使用java和spring的生产者-消费者模式

java - 根据人物位置绘制二维 map