[英]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.