java - JSplitPane 重置分隔线位置

标签 java swing jsplitpane

我有两个像这样的 JSplitPanes

splitPaneRight = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, console, tabPager);
splitPaneLeft = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, infoPanel, splitPaneRight);

splitPaneRight.setResizeWeight(1);

和一个如下所示的方法,通常通过单击其他地方的 JMenuItem 调用:

public void resetLayout()
{
    setSize(1280, 720);
    splitPaneLeft.setDividerLocation(165);
    splitPaneRight.setDividerLocation(830);
}

界面看起来像这样(可点击的缩略图):

Main user interface http://bit-stab.com/pictures/dump/MinecraftRemoteAdmin_thumb.jpg

我的问题是,每当我移动两个分隔线的位置时,我都必须按该菜单项两次,然后两个分隔线才回到原位。左边的总是第一次,右边的第二次。

我试过更改分隔线的设置顺序(先右后左)。我试过使已更改分隔线的拆分 Pane 无效,两个拆分 Pane 以及两个拆分 Pane 加上 UI(扩展 JFrame)

我还尝试在按下菜单项时运行该方法两次。或者检查 getDividerLocation() 是否返回我刚刚设置的值(出于某些奇怪的原因它这样做)。

最后但同样重要的是,我尝试了上述所有方法的组合。

我的想法用完了,是否有解决这个问题的方法?

编辑:我创建了一个可运行的示例(来源:http://pastebin.com/VKtN6zJZ),download.jar

最佳答案

setSize(1280, 720);

永远不要像那样硬编码大小。不是每个人都会使用相同分辨率的显示器。也许使用:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

或使用 Toolkit 类获取窗口边界。

setDividerLocation( double ) 方法仅适用于“已实现”的框架,这意味着在您调用了 pack()setVisible(true) 在框架上。

或者,您需要将代码包装在 SwingUtilities.invokeLater() 中,以确保代码以正确的顺序执行。有点像

SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        splitPaneLeft.setDividerLocation(165);
        splitPaneRight.setDividerLocation(830);
    }
});

如果这不起作用,那么可能每个语句都需要在单独的 invokeLater() 中完成。

关于分隔线位置的相同评论。不要对值进行硬编码。也许您可以使用 setDividerLocation(.25f) 方法按百分比而不是绝对值分配大小。

关于java - JSplitPane 重置分隔线位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20620274/

相关文章:

java - JSplitPane:有没有办法显示/隐藏其中一个 Pane ?

java - 如何在请求中通过 id 引用实体

java - 如何制作对象的副本并与原始对象进行比较

java - JScrollpane 无法正常显示

java - 在 JTextArea 中查找搜索项

java - 如何更改 JSplitPane 中分割栏的样式?

java - 将 JSplitPane 与 JTextArea 一起使用

java - spring mvc ajax数据用Jackson截断

java - 尝试在不同的 JPanel 上重新绘制

java - 如何更改框架的大小?