2

JPanelのpaintComponent()メソッドをオーバーライドして、JPanel上にグラフを描画する必要があります。

JFrame上にJPanelをドラッグアンドドロップするときにNetBeansを使用してGUIを設計しているときに、プライベート変数JPanelオブジェクトを作成してコードを生成します。そのような場合、どうすればそのメソッドをオーバーライドしてそれを描画できますか...

または、JPanelを拡張してクラスのコードを記述し、メソッドをオーバーライドしてペイントする場合は、新しいJFrameを作成し、それにJPanelを追加する必要があります。

JFrame fr = new JFrame(); fr.add(ペイン); //ペインはJPanelを拡張するクラスのオブジェクトであり、fr.setVisible(true);を描画します。

この場合、それは機能します。

しかし、netbeansによってJFrameを拡張する自動作成クラスの参照を取得し、それを使用して、参照のaddメソッドを使用してJPanelを追加すると、機能しません...

class x extends JPanel 
{ 
       paintComponent(Graphics g){         //overridden method 

           //my code for drawing say lines goes here.. 
           } 
} 

class y extends Thread 
{ 
         z obj; 

         y(z obj){ 

          this.obj=obj; 
          } 
         public void run(){ 

              x pane=new x(); 
              pane.setVisible(true); 
              obj.add(pane); 
              obj.setVisible(true);         //im not getting the pane visible here.. if i created a new JFrame class here as i said earlier and added the pane to it i can see it.. 
            } 
} 

class z extends JFrame 
{ 
            z(){//code generated by netbeans} 

           public static void main(String args[]) 
           { 


                    new y(new z()).start(); 
           } 
}

エラーは表示されませんが、プログラムを実行するとJframeのみが表示されます。JPanelは表示されません。

質問がばかげているなら許してください..初心者です..

前もって感謝します...

4

3 に答える 3

2

Swing 開発の主なルールに違反しているため、コードの動作は予測できません。すべての UI 作業は Event Dispatch Thread (EDT) で行う必要があります。コードは次のようになります。

public static void main(String args[]) { 
    SwingUtilities.invokeLater( new Runnable() {
         void run() 
         {
             JFrame z = new JFrame();
             z.add(new X()); // works only in java 6
            //z.getContentPane().add(new X()); // works in any version of java
             z.pack(); // assuming your pane has preferred size 
             z.setVisible(true); 

         }
    }); 
}

この件に関する詳細はこちら: http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

于 2009-08-22T16:19:49.173 に答える
1

あなたのコードはかなり難読化されています。とにかく、代わりに

obj.add(pane); 

あなたが必要

obj.getContentPane().add(pane); 
于 2009-08-22T14:10:39.333 に答える
-1

Swingを使用する初心者のようです。ただし、ライブラリJXLayerを使用すると、コンポーネントへのペイントが非常に簡単で直感的になります。

彼らのデモとサンプルコードをチェックしてください。

それ以外の場合、優れたJFreeChartは、優れた無料のJavaグラフ(および視覚化)ライブラリです。

于 2009-08-22T16:28:43.447 に答える