我正在尝试在JSplitPane上使用setDividerLocation
以“最佳尺寸”方式调整两个面板的大小,以便垂直滚动条不会显示在顶部面板中。拆分位置应该位于顶部面板中的最后一个数据之后。
使用jSplitPane1.setResizeWeight(1D)
为顶部组件预留了太多空间,导致数据下方空白。
我正试图让它恰到好处!
答案 0 :(得分:2)
我假设你在分隔页的上方有一个JTable
作为主要组件?如果是这样,你可以这样做:
int location = (int) table.getPreferredSize().getHeight();
location += splitPane.getDividerSize() * 2;
splitPane.setDividerLocation(location);
答案 1 :(得分:1)
我建议避免在用户想要与之交互时移动JSplitPane
。我可以想象看到窗格在拖动之前/之后跳过几个像素会很烦人。
尽管如此,您可能需要查看获取滚动条的尺寸,并将分隔符位置偏移该量。例如,假设您构建了JTable
,如下所示:
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
添加一些偏移量:
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
将调整大小,从而导致循环,因此这种构造并不理想。
答案 2 :(得分:-1)
您可以将分隔符位置设置为零,然后将分隔符大小设置为0.这将仅显示底部面板。那是你在找什么?
jSplitPane1.setDividerLocation(0);
jSplitPane1.setDividerSize(0);