2

JPanelでの描画の表示に問題があります。次のように相互にリンクする3つのクラスを作成しました。なぜこのコードが私の図面を表示しないのか疑問に思いました。

c.add(pDraw);
pDraw.add(draw);

1)メイン

public class mainPage {
    public static void main(String[]args){
      JFrame appFrame = new Frame();
      appFrame.setVisible(true); 
      appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

2)JFRAME

 public class Frame extends JFrame implements ActionListener{

    private drawingBoard draw;  

    public Frame (){
         draw = new drawingBoard(); //generate pattern
         GridBagLayout m = new GridBagLayout();
         Container c = (Container)getContentPane();
         c.setLayout (m);
         GridBagConstraints con;
         .......

         JPanel pDraw = new JPanel();       
         pDraw.setPreferredSize(new Dimension(500,500));
             .....  
         c.add(pDraw);
         pDraw.add(draw); // Call other class for drawing

         .....
         setResizable(false); 
         pack();
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
         setVisible(true);
    }
}

3)JPANEL

public class drawingBoard extends JPanel {
      .....
      public void paint(Graphics g) {
      ......
      }
   }
4

4 に答える 4

3

これが答えです。drawingBoard JPanelのサイズを設定するのを忘れていました:-)

 public class drawingBoard extends JPanel {
        public drawingBoard(){
        setPreferredSize(new Dimension (500,500));

        }
    }
于 2009-10-09T12:13:13.580 に答える
1

コードが1行変更されます。

あなたがしなければならないのは、あなたが間違っていることを理解するために「カスタムペインティング」に関するSwingチュートリアルを読むことです。

これは、チュートリアルをわざわざ読んだ場合に数分で解決できた可能性のある3番目の質問です。

そして、あなたはまだSSCCEを投稿する方法を学んでいないので、私はあなたに答えをスプーンで与えるつもりはありません。

于 2009-10-09T03:31:45.047 に答える
0

私はベン・トレルが彼の投稿で述べたすべての点に同意します-それに加えて、ここでいくつかの追加のトラブルシューティングのアドバイスをします。

これを試して -

public class DrawingBoardTest extends JFrame {
    public DrawingBoardTest() {
        getContentPane().add(new drawingBoard(), BorderLayout.CENTER);
    }
    public static void main(String[] args ) {
        JFrame f = new DrawingBoardTest();
        f.setSize(500, 500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

drawingPanelが表示される場合は、GridBagLayoutに問題があるか、drawingPanelに適切なサイズが設定されていて、描画を表示するのに十分な大きさではないか、drawingBoardをpDrawに追加しています(コードからわかる限り) 、実際には必要ありません...)。

JFrameのコンテンツペインのデフォルトのレイアウトはBorderLayoutです。これにより、投稿したコードでdrawingBoardを配置する中央のコンポーネントにすべてのスペースが与えられます。

JPanelのデフォルトのレイアウトはFlowLayoutで、これはコンポーネントに適切なサイズのみを提供します。元のコードでは、drawingBoardではなくpDrawで優先サイズを設定しているようです。drawingBoardには、図面を表示するには小さすぎる優先サイズが設定されている可能性があります。

drawingPanelが表示されない場合は、drawingPanel paint()メソッドに問題があります。

于 2009-10-09T03:40:00.600 に答える
0

GridBagConstraints または paint() メソッドを確認せずにコードをデバッグするのは少し難しいですが、一般的には paint() メソッドよりも paintComponent() メソッドをオーバーライドする方がよいと考えられていることをお伝えします。drawingBoard では、paint() をオーバーライドする代わりに、これを試してください。

public void paintComponent(Graphics g) {
    super.paintComponent(g); //optional
    ...
}

それは違いを生むかもしれません。詳細については、Java のこの記事を参照してください

また、オマケとして、おそらく main() メソッドと Frame のコンストラクターの両方で setVisible() と setDefaultCloseOperation() を実行する必要はありません。

于 2009-10-09T03:16:08.137 に答える