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

您可以将除一个滚动条之外的所有滚动条设置为VERTICAL_SCROLLBAR_NEVER并将一个设置为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仅适用于javax.swing.JLayer, javax.swing.ScrollPaneLayout, javax.swing.ViewportLayout(查看 的调用getScrollableTracksViewportHeight()) - 所以这仅在 JTable 位于某个视口内时才有效。

于 2012-06-08T11:27:24.330 回答