2016-05-13 20 views
0

まず、この質問が以前に尋ねられた場合は申し訳ありませんが、どこでも答えが見つからないようですので、ここに行きます:パネルにキャンバスを追加してもキャンバスが表示されませんか?

キャンバス要素を追加する際に表示しようとしていますパネルの周りにタイトルのついた境界線があるパネル。ここに私のコードです。

public class TestClass extends JFrame{ 

    private TestClass() { 
     GuiCanvas canvas = new GuiCanvas(); 

     setTitle("TestClass"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(1300, 800); 

     Border menuBorder = BorderFactory.createTitledBorder(
       BorderFactory.createLineBorder(Color.LIGHT_GRAY), "Overview"); 

     JPanel controlpanel = new JPanel(); 
     JPanel panelCanvas = new JPanel(); 

     panelCanvas.setBorder(menuBorder); 
     panelCanvas.add(canvas); 

     controlpanel.setLayout(new GridLayout(3, 1)); 
     controlpanel.add(panelCanvas); 

     add(controlpanel); 
     setLocationRelativeTo(null); 
     setVisible(true); 

     System.out.println(canvas.getBounds()); 

    } 

    private class GuiCanvas extends Canvas { 

     GuiCanvas() { 
      setBackground(Color.LIGHT_GRAY); 
     } 

     @Override 
     public void paint(Graphics g) { 
      g.drawLine(20, 20, 20, 200); 
     } 
    } 

    public static void main(String[] args) { 
     new TestClass(); 
    } 
} 

それは私がGuiCanvasクラスに描画規定される線を示すべきであるというタイトルの境界を持つ空のパネルに上記のコードをもたらします。私はここに何かを逃していますかキャンバス要素をパネルに追加することも可能ですか?事前に助けていただきありがとうございます。

+1

混合を避けます重量と軽量のコンテナでは、互いにうまく遊びません。 'BufferStrategy'で遊んでいない限り、' Canvas'を使う必要はありません。 – MadProgrammer

答えて

-1

Canvasオブジェクトを実際にJPanelに追加することは可能です。

あなたの問題は、Canvasに定義されたサイズがないという事実にあります。あなたが必要なもの は、2次の行

canvas.setPreferredSize(new Dimension(1300,300)); 
    /* 
    * 
    */ 
    this.pack(); 

ですこれは、ライトグレーの背景に黒い縦線を表示し、panelCanvas国境の内側にキャンバスを配置します。

+0

本当にありがとう、本当に感謝しています。正しく理解するために:すべてのキャンバス要素が優先される必要がありますパネルに追加するサイズ? –

+1

Java Swingのset(Preferred | Maximum | Minimum)サイズメソッドの使用を避けるべきですか?(http://stackoverflow.com/q/7229226/418556)(はい。 。 –

2

キャンバスパネルのサイズにストレッチしたい場合は、変更:

JPanel panelCanvas = new JPanel(); 

へ:

JPanel panelCanvas = new JPanel(new GridLayout()); 

も参照してくださいthis answer

関連する問題