2

スプリットペインの作成時に Scala Swing SplitPane の相対 (ダブル) ディバイダーの位置を目的の値に設定することはほとんど不可能に思えます。スプリッターは、ほとんどの場合、その親コン​​ポーネントの上部に表示されます。再検証と再描画のさまざまな組み合わせを使用してみましたが、何も機能していないようです。コンストラクターで分割ペインを使用してフレームをインスタンス化し、それを表示して分割ペインの値を設定すると、分割線が正しい位置に表示されます。ユーザーインターフェイスから関数を呼び出して設定した場合も、正しい位置に移動します。しかし、既存のフレームにスプリペインを導入できるようにしたいと考えています。

これは既知の問題ですか? 解決策はありますか?タイマーを使用して、1/4 秒または 0.5 秒後に仕切りの位置を設定する必要がありますか? - 非常に面倒ですが、動作するはずです。

まだ目的の結果が得られないサンプル コード:

val newSplit = new CSplit(Right(canv1), Right(newMapCanv))        
panel.layout(newSplit.pane) = BorderPanel.Position.Center
thisScn.visible = true
newSplit.pane.dividerLocation = 0.5 
newSplit.pane.bottomComponent = canv1
newSplit.pane.topComponent = canv2
newSplit.pane.dividerLocation = 0.5
newSplit.pane.revalidate
newSplit.pane.repaint
panel.revalidate
panel.repaint
newSplit.pane.dividerLocation = 0.5
newSplit.pane.revalidate
newSplit.pane.repaint
newSplit.pane.dividerLocation = 0.5
4

1 に答える 1

2

各コンポーネントの preferredSize を 0 -> 0 に設定してみてください。SplitPane を扱うときに使用したコードを次に示します。

oneTouchExpandable = true
resizeWeight = 0.5
leftComponent.preferredSize = 0 -> 0
rightComponent.preferredSize = 0 -> 0
于 2012-08-20T02:20:26.570 に答える