2014-08-31 52 views
3

我想創建一個窗口,其中有3個jPanel,由splitPane-s分隔。左側和右側應該由用戶調整大小,中間的一個應該填充剩餘的空間。用3個面板創建JSplitPane

我已經創建了它,但是如果我移動第一個splitPane,那麼第二個也在移動。我不確定,如果我用我想要的最好的方法。

import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSplitPane; 

public class MyWindow extends JFrame { 

    public MyWindow() { 
     this.setLayout(new BorderLayout()); 

     JPanel leftPanel = new JPanel(); 
     JPanel centerPanel = new JPanel(); 
     JPanel centerPanel2 = new JPanel(); 
     JPanel rightPanel = new JPanel(); 

     JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, centerPanel); 
     JSplitPane sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centerPanel2, rightPanel); 

     centerPanel.setLayout(new BorderLayout()); 
     this.add(sp, BorderLayout.CENTER); 
     centerPanel.add(sp2, BorderLayout.CENTER); 

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     this.setSize(500, 500); 
     this.setVisible(true); 
    } 

} 

回答

1

你在做什麼看起來還怪我即添加到centerPanel拆分窗格,然後添加拆分窗格的centerPane。不確定,但我認爲後者否定了前者。

您需要做的就是將第一個拆分窗格添加到第二個拆分窗格。

import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSplitPane; 
import javax.swing.SwingUtilities; 

public class MyWindow extends JFrame { 

    public MyWindow() { 
     this.setLayout(new BorderLayout()); 

     JPanel leftPanel = new JPanel(); 
     leftPanel.setBackground(Color.BLUE); 
     JPanel centerPanel = new JPanel(); 
     centerPanel.setBackground(Color.CYAN); 
     JPanel rightPanel = new JPanel(); 
     rightPanel.setBackground(Color.GREEN); 

     JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, centerPanel); 
     JSplitPane sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sp, rightPanel); 

     this.add(sp2, BorderLayout.CENTER); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     this.setSize(500, 500); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new MyWindow(); 
      } 
     }); 
    } 
} 
+0

的排序。左側窗格只能調整到第二個分隔符的位置。另一方面,右窗格可以一直收縮到最左面板的最左邊界。這是一個半解決方案,但並不是真正做到這一點的正確方法。 – searchengine27 2017-12-06 20:23:20

+0

差不多就是這樣。您只需將'sp'的最小大小設置爲分隔符位置+ 2 *分隔符大小+ 1,即可完成這項工作。我沒有深入研究爲什麼會出現這種情況,但它修復了@ searchengine27評論中的錯誤。 所以你可以爲它寫一個新組件,或者簡單地爲'sp'創建一個匿名類。 請注意,這隻能防止分隔線收縮左側面板。另一個解決方案是調整正確的組件。我不明白這是如何可能的。 – 2018-03-05 00:25:04