有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing Java组件()

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()和一个super.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(),那么应该重新绘制上面的组件

道格·豪夫


共 (1) 个答案

  1. # 1 楼答案

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

    任何你想画的东西都必须被添加到一个可显示的容器中

    看看Painting in AWT and Swing了解更多关于绘画的细节

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