2016-03-07 36 views
0

Im的空間嘗試添加按鈕和文本框到我的JMenuBar,甚至之後我設置了JTextField的首選大小,JTextField的不斷在我的JMenuBar填充的空間。JTextField中保持充盈的JMenuBar

注意:這是的JMenuBar使用此方法添加 -

public static void setJPanelMenuBar(JPanel parent, JPanel child, JMenuBar menuBar) { 
     parent.removeAll(); 
     parent.setLayout(new BorderLayout()); 
     JRootPane root = new JRootPane(); 
     parent.add(root, BorderLayout.CENTER); 
     root.setJMenuBar(menuBar); 
     root.getContentPane().add(child); 
     parent.putClientProperty("root", root); //if you need later 
    } 

的代碼可以讓我在一個JPanel添加的JMenuBar。

現在到JMenuBar的代碼。

JMenuBar x = jMenuBar1; 

     x.removeAll(); 

     JTextField searchBar = txtsearch; 
     JTextField searchBar2 = new JTextField(); 

     searchBar2.setPreferredSize(new Dimension(10,20)); 

     x.add(lblsearch); 
     x.add(searchBar); 
     x.add(btnSearch); 
     x.add(Box.createHorizontalGlue()); 
     x.add(searchBar2); 

注:jMenuBar1lblsearchtxtsearchbtnSearch使用NetBeans中創建的。

爲了測試這個,我添加了另一個名爲searchBar2的JTextField並設置了首選大小,但是即使在我添加了Box Glue之後,它們仍然佔用了JMenuBar中留下的空間。

任何想法,爲什麼?

回答

0

How to Use BoxLayout教程:

當的BoxLayout從上到下勾畫出的部件,它試圖在尺寸組件的優選高度每個組件。如果佈局的垂直空間不匹配優選高度之和,然後的BoxLayout試圖調整部件,以填補空間。組件要麼增長或收縮,以填補空間,具有的BoxLayout履行的最小和各組分的最大尺寸。任何額外的空間出現在容器的底部。

(重點煤礦)

顯然這同樣適用於寬度在水平框。在我看來,上述應該是在BoxLayout的實際的javadoc,但事實並非如此。

在你的情況,最簡單的解決方法是刪除到了setPreferredSize顯式調用,而不是設置每個JTextField的最大尺寸,以符合其首選大小:

searchBar.setMaximumSize(searchBar.getPreferredSize()); 
searchBar2.setMaximumSize(searchBar2.getPreferredSize()); 

的BoxLayout試圖尊重最小值和最大值。