2015-01-15 47 views
3

我使用Java和MiGLayout嘗試重新創建這個佈局:如何在Java中創建這3列分離器?

http://www.methvin.com/splitter/3csplitter.html

因此,像這樣:

  • 每一列必須是可調整大小
  • 的大小在調整主窗口大小時左右列保持相同大小
  • 中間列填充所有可用空間並在調整大小時更改大小

換句話說,左,右面板需要「粘」在窗口的左側和右側,也可調整大小(與被調整時,不按比例改變)

我試着很多事情,但調整大小始終是問題。這是當前的代碼,這是試圖用嵌套的JSplitPane做到這一點。

public class MainGUI extends JFrame { 
    private String app_name = "Layout Test"; 
    private int window_x_min = 700; 
    private int window_y_min = 450; 

    public MainGUI() { 
     setTitle(app_name); 
     setSize(window_x_min + 200, window_y_min + 100); 
     setMinimumSize(new Dimension(window_x_min, window_y_min)); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 

     JPanel panel = new JPanel(); 
     this.setContentPane(panel); 
     panel.setLayout(new MigLayout("","[]","[grow]")); 
     JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); 
     splitpane.setContinuousLayout(true); 

     splitpane.setTopComponent(new JButton("middle")); 
     splitpane.setBottomComponent(new JButton("right")); 

     JSplitPane splitpane2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); 
     splitpane2.setContinuousLayout(true); 
     splitpane.setDividerLocation(450); 

     splitpane2.setBottomComponent(splitpane); 
     splitpane2.setTopComponent(new JButton("left")); 

     panel.add(splitpane2, "push, grow"); 

     this.pack(); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setVisible(true); 
    } 
} 

我已經成功地使其加載最初我是怎麼樣,但是有下列問題:

  • 從右側改變大小的「正確」的面板,而不是調整大小中間面板
  • 從左側調整大小的尺寸改變了「正確」面板的大小以及

看來,應用程序的左側是工作,我需要合適的側部T o功能相同。希望我有道理,謝謝!

回答

1

您需要管理拆分窗格調整大小時如何分配空間。這是通過使用setResizeWeight()方法完成的。默認值是0.0f,這意味着「左」組件是固定的。所以你需要在其中一個分割窗格上操作這個屬性。閱讀API以獲取有關此屬性如何工作的更多信息。

我不使用MigLayout,但這樣做使用標準的BorderLayout所有你需要添加一個簡單的測試:

splitpane.setResizeWeight(1.0f); 

此外,當您發佈SSCCE不要忘了包括主( )方法,所以我們可以複製/粘貼/執行代碼。我們不應該需要做任何額外的工作。

+0

謝謝!我很抱歉沒有把主要方法。這是一個簡單的修復,我很感謝您的幫助。 –

相關問題