1

私が抱えている問題は、JTable (jtbls) にさらに行を追加すると、垂直スクロールバーが JScrollPane (外側) に表示されないことです。

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1, 4));
JScrollPane outer = new JScrollPane(panel);

jtbls = new JTable[4];
for (int i = 0; i < jtbls.length; i++) {
    jtbls[i] = new JTable(new MyTableModel());
    jtbls[i].setFillsViewportHeight(true);
    jtbls[i].setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));

    JPanel inner = new JPanel(new BorderLayout());
    inner.add(jtbls[i], BorderLayout.CENTER);
    inner.add(jtbls[i].getTableHeader(), BorderLayout.NORTH);
    inner.setPreferredSize(new Dimension(outer.getWidth() / 4, 70));

    panel.add(inner);
}

add(outer);

スクリーンショット

4

2 に答える 2

2

1つを除くすべてのスクロールバーをVERTICAL_SCROLLBAR_NEVERに設定し、1つをに設定できVERTICAL_SCROLLBAR_ALWAYSます。次に、@ camickrがここで示したように、スクロールバーモデルを結び付けます。

于 2012-06-08T15:50:52.753 に答える
1

これは、設定したためです。

inner.setPreferredSize(new Dimension(outer.getWidth() / 4, 70));

上記inner JPanelの高さで「問題あり」で70あり、親にそれ以上のスペースを要求しません-親にそれ以上のスペースを要求しませんJPanel panel- JVieport

また、のソースコードを見ると、JTableメソッドは, にのみsetFillsViewportHeight適用されます (の呼び出しを見てください) - これは、JTable がビューポート内にある場合にのみ機能します。javax.swing.JLayerjavax.swing.ScrollPaneLayoutjavax.swing.ViewportLayoutgetScrollableTracksViewportHeight()

于 2012-06-08T11:27:24.330 に答える