2016-10-28 5 views
0

jPanelを表示/非表示にしてからpack()を呼び出すボタンがあります。パネルの右側にあるパネルとギャップの間にあったjPanel水平ギャップを隠した後、右側に大きな水平方向のギャップを作ります。隠しjPanelから右横の空白を削除する

私はボーダーレイアウトであるデフォルトレイアウトを使用しています。ここで

は今何が起こるかです: enter image description here

そして、どのように私はそれがJPanelの enter image description here

private void normalDistributionTableToggleActionPerformed(java.awt.event.ActionEvent evt) {                
    normalDistributionTablePanel.setVisible(!normalDistributionTablePanel.isVisible()); 
    pack(); 
    revalidate(); 
    repaint(); 
    System.out.println("Toggle normal distribution table."); 
} 
+0

1. 'revalidate();'と 'repaint()'; 'pack()'が呼び出されるコンテキストでは反作用的です。2. 3つのコード行はすべて、 'NullLayout'が使用されている場合、役に立たない可能性があります。 3.全てのJPanelの 'getPreferredSize'をオーバーライドし、' getPreferredSize'を受け付けるpropotional 'LayoutManager'を使用します。5.より良いヘルプのために、' SSCCE'/'MCVE'を短く実行します。 'getPreferredSize'のハードコーディングされた' Dimension'を使用した 'JPanel' – mKorbel

答えて

1

を隠した後、私はボーダーレイアウトでデフォルトのレイアウトを使用していますようになりたいと思うだろう。

異なるレイアウトマネージャを使用するパネルをネストしています。両方のコンポーネントが表示された状態で2番目の画像を見ると、右側の隙間が左側より大きくなっています。

FlowLayoutのようなレイアウトマネージャによっては、コンポーネントの可視性が正しく処理されるため、右側のギャップは一定のままです。

一方、BoxLayoutのようなレイアウトマネージャを使用し、コンポーネント間に「水平ストラット」を追加すると、パネルを非表示にすると、ギャップが増える2つのストラットが一緒になっていることがわかります。

コードを生成するためにIDEを使用している場合、GroupLayoutコードのIDEはありませんが、IDEを使用せずに手動でレイアウトコードを書き込むことをお勧めします。

簡単なデモコード(SSCCE/MCVE)が表示されないと、具体的な解決策を提示できません。

+0

はいGUIビルダーを使用しています.jframeで直接jpanelsを入れ子にしています。 「水平支柱」はまさにここで起こっているものだと思います。 – Higeath

+1

@Higeathので、パネルの右側にある水平支柱を使用しないでください。代わりに 'EmptyBorder'を使ってパネルにもっと多くのスペースを与えることができます。パネルが非表示になると、EmptyBorderも非表示になります。ポイントは、Swingを使用してレイアウトを設計し、より多くの制御が可能で、IDEにレイアウトをさせてコードを生成させる場合です。 – camickr