在paintComponent完成后更改JComponent的颜色

时间:2013-12-04 22:23:03

标签: java swing colors paintcomponent jcomponent

我正在测试一个扩展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);
}

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

1 个答案:

答案 0 :(得分:3)

  

你能告诉我如何正确更新已经绘制的颜色   这个组件中的形状,提前谢谢。

不是那么强硬:

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

     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
           }
       }
     } 
    
  5. 虽然作为OOP原则,您实际上应该使用MyShape属性声明Color类,并且在绘制之前使用setter方法作为示例将颜色设置为形状。