2016-12-19 9 views
1

私のメインでこれを実行している場合:Java:CanvasがJFrameに追加されたときにキャンバスのサイズが変更されないようにするにはどうすればよいですか?

Canvas can = new Canvas(); 

    can.setSize(400, 400); 

    System.out.print(can.getWidth() + ", " + can.getHeight() + " "); 

    JFrame frame = new JFrame(); 

    frame.add(can); 
    frame.pack(); 
    frame.setResizable(false); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    System.out.println(can.getWidth() + ", " + can.getHeight()); 

コンソールが読み取ります 400、400 410、410それは私が私のJFrameに自分のキャンバスを追加し、追加のJFrameをパックするときのように思える

私のキャンバスの幅と高さに余分な10ピクセル。これが起こるのを防ぐことができ、ちょうど400×400のCanvasを得る方法はありますか?

+0

おそらく別のレイアウトマネージャを試してみてください。私はデフォルトがFlowLayoutだと思う。それはやっているかもしれませんが、わかりません。 – byxor

答えて

2

AWTコンポーネントであるCanvasを使用しないでください。

スウィングを使用する場合は、JPanelを使用し、パネルのgetPreferredSize()を上書きして目的のサイズに戻す必要があります。

また、setSize()は何もしません。レイアウトマネージャは、レイアウトマネージャのルールに基づいて各コンポーネントのサイズを決定します。

+0

それを上書きするのは良い考えですか?それはまだ内部的に異なるサイズになるのではないですか? – byxor

+1

@BrandonIbbotson、これはカスタムペイントとカスタムコンポーネントの作成を行い、そのコンポーネントがそのサイズを決定する必要があると仮定しています。もちろん、パネルを他のSwingコンポーネントのコンテナとして使用している場合は、レイアウトマネージャにそのサイズを決定させる必要があります。 – camickr

+0

パーフェクト。有益な答えは私も使うことができます。 – byxor

関連する問題