2010-11-23 13 views
2

JSplitPaneでsetDividerLocationを使用して、2つのパネルのサイズを「ベストサイズ」にして、垂直スクロールバーがトップパネルに表示されないようにしようとしています。スプリット位置は、上部パネルの最後のデータの直後でなければなりません。JSplitPaneの仕切りの見栄えの良い位置を計算する

jSplitPane1.setResizeWeight(1D)を使用すると、先頭のコンポーネントに余分なスペースが確保され、その結果、データの下に空きスペースが発生します。

私はそれを得ようとしていますちょうどいいよ!

alt text

+0

水平スクロールバーをハイライト表示しました。あなたが言っているのはそれですか? –

+0

混乱を避けるために、画像を再掲載します。 –

+1

私は文句を変えて、あなたが達成しようとしていることをもう少し明確にしました。これがあなたが望むものでない場合は、自由にロールバックしてください。 –

答えて

2

JTableをスプリットパネルの上側にメインコンポーネントとしますか?もしそうなら、次のようにすることができます:

int location = (int) table.getPreferredSize().getHeight(); 
location += splitPane.getDividerSize() * 2; 
splitPane.setDividerLocation(location); 
-1

あなたはゼロだけボトムパネルを示す効果を有するであろう0これに分周サイズを設定する分周位置を設定することができます。それはあなたが探しているものですか?

jSplitPane1.setDividerLocation(0); 
jSplitPane1.setDividerSize(0); 
1

JSplitPaneを移動しないようにすることをお勧めします。ペインがドラッグする前/後にいくつかのピクセルをジャンプするのがむしろ厄介なことが想像できます。

しかし、スクロールバーの寸法を取得し、その分だけ仕切りの位置をオフセットすることをお勧めします。

JTable table = new JTable(myTableModel); 
final JScrollPane scrollPane = new JScrollPane(table); 
scrollPane 
     .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
scrollPane 
     .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

をあなたは、水平スクロールバーが表示されているかを決定するために、テーブルにリスナーを追加し、必要に応じて、いくつかはJSplitPaneにオフセットを追加することができます::

たとえば、次のように JTableを構築してきたと言います
table.addComponentListener(new ComponentListener() { 
    @Override 
    public void componentShown(ComponentEvent e) {} 
    @Override 
    public void componentResized(ComponentEvent e) { 
     System.out 
      .println(scrollPane.getHorizontalScrollBar().getHeight()); 
    } 
    @Override 
    public void componentMoved(ComponentEvent e) {} 
    @Override 
    public void componentHidden(ComponentEvent e) {} 
}); 

分周器の位置を変更することによって、tableがサイズ変更され、ループが発生するので、この構成は理想的ではありません。

関連する問題