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) を に追加する必要があります。私はこれが事実だと思うでしょう。この場合、コンポーネントを再描画する場合は、その特定のコンポーネントが呼び出された場所で再描画する必要があります。JPanelpaintComponent()super.paintComponent()temp.repaint()super.paintComponent()

これは、誰も持っていないか、少なくとも誰も実際に投稿していない答えのようです。私の説明は少しだけかもしれないので、ここで明確にしようと思います。

JComponent を拡張するクラスがいくつかあり、それらをすべてクラスで使用して再描画できるようにしたい場合。1つが円、長方形、正方形などであるとしましょう........

それらすべてにpaintComponent()withがある場合、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().

ダグ・ハウフ

4

1 に答える 1

2

MyClassペイントするには、画面に表示可能なものにYesを追加する必要があります。ここでの理由は、MyClassextendsJComponentmyTestClassextendsJPanelであり、それらはまったく関連していないためsuper.paintComponent、内部から呼び出してmyTestClassも描画や更新MyClassは行われません。

ペイントしたいものは、表示可能なコンテナに追加する必要があります。

ペイントの詳細については、AWT および Swing でのペイントを参照してください。

repaint必要に応じて、任意Componentの個人またはその親コン​​テナーを呼び出すことができます

于 2013-11-07T03:29:33.153 に答える