【问题标题】:Change color of JComponent after paintComponent has finishedpaintComponent 完成后更改 JComponent 的颜色
【发布时间】:2013-12-21 15:31:28
【问题描述】:

我正在测试一个扩展 JComponent 的小部件类
小部件的构造函数包含一个向量并设置组件的 PreferredSize,然后是paintComponent:

public void paintComponent(Graphics g){
        g.setColor(Color.RED);
        g.drawString("this is text one", 10, 10);
            //here I draw some shapes based on the 
            //vector size and integers
        }
    }

组件被正确绘制,然后我在 main 中调用其他一些方法,当这些方法完成它们的工作时,我调用 widget.methodsFinished():

methodsFinished(){
        g.setColor(Color.GREEN);
        g.drawString("this is text two", 30, 30);
                this.update(g);
}

这样做我得到了空指针异常,你能告诉我如何正确更新这个组件中已经绘制的形状的颜色,提前谢谢你。

【问题讨论】:

    标签: java swing colors paintcomponent jcomponent


    【解决方案1】:

    你能告诉我如何正确更新已经绘制的颜色吗 此组件中的形状,在此先感谢您。

    没那么难:

    1. 在您的类上下文中声明一个私有 Color 字段。
    2. 声明一个公共setShapeColor(Color color) 为组件设置颜色
    3. 调用repaint() 以反映颜色变化
    4. 作为警告:不要忘记在 paitnComponent(Graphics) 函数中调用 super.paintComponent(g);,您还没有这样做。

       class MyComponent extends JPanel
       {
           private Color shapeColor = Color.RED;
      
           public void setShapeColor(Color color)
           {
             this.shapeColor = color; 
           }
      
          @Override
         public void paintComponent(Graphics g){
          super.paintComponent(g);
          g.setColor(shapeColor);
          g.drawString("this is text one", 10, 10);
              //here I draw some shapes based on the 
              //vector size and integers
             }
         }
       } 
      

    虽然作为OOP原则,你实际上应该声明一个带有Color属性的MyShape类,并且在绘制之前使用setter方法作为例子来设置形状的颜色。

    【讨论】:

    • 谢谢,这已经接近我需要的了,我会测试更多以适应需求
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 2012-05-25
    • 2019-05-03
    • 2018-05-03
    • 2021-04-06
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多