在JSplitPane中计算分隔符的“漂亮”外观位置

时间:2010-11-23 17:36:19

标签: java swing

我正在尝试在JSplitPane上使用setDividerLocation以“最佳尺寸”方式调整两个面板的大小,以便垂直滚动条不会显示在顶部面板中。拆分位置应该位于顶部面板中的最后一个数据之后。

使用jSplitPane1.setResizeWeight(1D)为顶部组件预留了太多空间,导致数据下方空白。

我正试图让它恰到好处!

alt text

3 个答案:

答案 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);