1

java 油漆组件()

     class MyClass extends JComponent {
         void paintComponent() {
             //code for class here
          }
     }

     class myTestClass extends JPanel {
         MyClass temp = new MyClass();

         void paintComponent() {
               super.paintComponent();


      static void main(String[] a) {
           JFrame f = new JFrame();
              //Does the temp have to be added to the panel before it can be repainted
      } 
     } //End Class

我知道JPanel进入JFrame. 但是是否MyClass必须将类 () 添加到 中,JPanel以便使用paintComponent()重绘子节点super.paintComponent()。我想会是这样。如果是这种情况,那么如果重新绘制组件,则temp.repaint()应该在调用它的任何地方重新绘制该特定super.paintComponent()组件。

这似乎是一个没有人或至少没有人真正发布过的答案。我的解释可能有点,所以我会在这里尝试澄清一下。

如果我有几个扩展 JComponent 的类,并且我希望它们都在类中使用,那么我可以重新绘制它们。假设一个是圆形,矩形,正方形等............

如果他们都有一个paintComponent()with asuper.paintComponent()他们应该能够重新粉刷VariableName.repaint();

是否必须将它们添加到JPanel将它们作为内容保存的内容中。并且可以repaint()从代码中的任何地方调用它们(我认为是这种情况)。

驱动类:

  class MyMainDriverClass {
    A a = new A();
    B b = new B();
    C c = new C();

void someClass() {
   a.repaint();
   b.repaint();
   c.repaint();  //this should repaint the components if the JPanel is inside of the JFrame 
                 //(I didn't put this code in)
 }
}

如果创建的所有类都具有paintComponent().

道格·豪夫

4

1 回答 1

2

MyClass需要添加到屏幕上可显示的内容才能被绘制。这里的原因是MyClassextendsJComponentmyTestClassextends JPanel,它们没有任何关系,所以super.paintComponent从内部调用myTestClass不会MyClass以任何方式绘制或更新。

您想要绘制的任何东西都必须添加到可显示的容器中。

有关绘画的更多详细信息,请查看AWT 和 Swing中的绘画。

您可以根据需要调用repaint任何Component个人或其父容器

于 2013-11-07T03:29:33.153 回答