簡體   English   中英

JSplitPane重置分配器位置

[英]JSplitPane resetting divider positions

我有兩個像這樣的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);
}

界面看起來像這樣(可點擊的縮略圖):

主要用戶界面http://bit-stab.com/pictures/dump/MinecraftRemoteAdmin_thumb.jpg

我的問題是,每當我移動兩個分隔器的位置時,我必須在兩個分隔器重新就位之前按下該菜單項兩次。 左邊的一個總是在第一次進行,右邊在第二次進行。

我試過改變設置分頻器的順序(先是右,然后是左)。 我嘗試過無效,更改分隔符的分割窗格,分割窗格,以及分割窗格和UI(擴展JFrame)

我也嘗試在按下菜單項時運行該方法兩次。 或者檢查getDividerLocation()是否返回我剛剛設置的值(由於一些奇怪的原因它會這樣做)。

最后但並非最不重要的是,我嘗試了以上所有的組合。

我的想法已經不多了,是否存在可行的修復方法?

編輯:我已經創建了一個可運行的示例(來源: http//pastebin.com/VKtN6zJZ ), download.jar

setSize(1280, 720);

永遠不要硬編碼這樣的尺寸。 並非所有人都使用相同的分辨率監視器。 也許用:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

或使用Toolkit類獲取窗口邊界。

有時您需要將代碼包裝在SwingUtilities.invokeLater()以確保代碼以正確的順序執行。 就像是

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

如果這不起作用,則可能需要在單獨的invokeLater()中完成每個語句。

關於分隔符位置的相同評論。 不要硬編碼值。 也許您可以使用setDividerLocation(.25f)方法分配大小百分比而不是絕對值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM