Swingで、JSplitPaneが2つのjpanelをそれぞれ50%のサイズで分割するための最良の方法は何ですか。
パネルに希望のサイズを設定しないと、常に最初のパネルがほとんど見えなくなり(2%)、2番目のパネルがほとんど見えなくなる(98%)ようです。
前もって感謝します
使用する
setResizeWeight
(.5d);
[...]デフォルトの値0は、右/下のコンポーネントがすべての余分なスペースを取得することを示します(左/上のコンポーネントは固定されて動作します)。一方、値1は、左/上のコンポーネントがすべての余分なスペースを取得することを指定しますスペース(右/下のコンポーネントは固定されています)。 [...]
setDividerLocation(double proportionalLocation)
を使用して、JSplitPane
の初期空間分布を決定する必要があります。次に、同じ値でsetResizeWeight(double)
を呼び出して、ペインのサイズが比例して変更されるようにします。
また、注意してください:JSplitPane
が表示される前にsetDividerLocation(double)
を呼び出すと、スペースの計算として正しく機能しませんComponent
の現在のサイズに基づいています。代わりに、JPanel
を含むJSplitPane
のPaintメソッドをオーバーライドするなど、厄介なハックを行う必要があります。
private boolean painted;
@Override
public void Paint(Graphics g) {
super.Paint(g);
if (!painted) {
painted = true;
splitPane.setDividerLocation(0.25);
}
}
同様の問題が発生し、親コンテナのコンポーネントリスナーを使用して問題を解決し、最初のサイズ変更時に仕切りの位置を設定しました。変数firstResizeをtrueに初期化し、これを親コンテナーコンストラクターに追加します。
addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e) {
if(firstResize){
splitPane.setDividerLocation(0.5);
firstResize = false;
}
}
});
これにより、親コンテナのサイズが最初に設定されたときに、仕切りが中央に配置されます。
ここでの解決策は、ユーザーが仕切りを移動する場合(つまり、可変の仕切りの位置)を考慮していません。これを考慮した完全な例は、次の場所にあります。