2016-03-08 65 views
1
  1. 我試圖動態地將組合框添加到JPanel,但組合框佔據整個面板。根據組合框計數組合框的大小正在改變,但我想要固定大小的組合框,我需要創建組合框一個接一個的方式在另一個組合框/在一個新的行。
  2. 如何在面板中設置組件的位置。動態添加組件到JPanel更改組件大小

    JComboBox startDate = new JComboBox(); 
    startDate.setPreferredSize(new Dimension(80,25)); 
    jPanelStartDate.add(startDate); 
    jPanelStartDate.setLayout(new GridLayout(0, 3, 10, 10)); 
    jPanelStartDate.revalidate(); 
    
+0

你可以顯示你的JPanel甚至JFrame的代碼嗎?如果不是,我們只能通過猜測來診斷。 – user3437460

+0

1)爲了更好地提供幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 2)請參閱[我是否應避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是。).. –

+0

.. 3 )Java GUI必須在不同的語言環境中使用不同的PLAF來處理不同的操作系統,屏幕大小,屏幕分辨率等。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 4)每個線程提出一個問題。 SO是一個問答網站,而不是幫助臺。 –

回答

0

好吧,你有一個以上的選項。您可以使用帶有Y_Axis和rigid areaBoxLayout,或者您可以使用更高級的複雜動態GridBagLayout。以下是BoxLayout和剛性區域的示例。

JFrame frame = new JFrame("Test"); 
JPanel panel = new JPanel(); 

BoxLayout boxLayout = new BoxLayout(panel, BoxLayout.Y_AXIS); 
panel.setLayout(boxLayout); 

for(int index = 0; index < 5; ++index){ 

     JComboBox<String> box = new JComboBox<>(new String[]{"a", "b", "c"}); 

     box.setMaximumSize(new Dimension(50, 50)); 
     box.setMinimumSize(new Dimension(50, 50)); 

     panel.add(box); 

     panel.add(Box.createRigidArea(new Dimension(10, 10))); 
} 

frame.setContentPane(panel); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setSize(new Dimension(300, 300)); 
frame.setVisible(true); 

您可以根據需要更改尺寸,特別是剛性區域的尺寸,以調整組件的空間和尺寸。

+0

現在它不佔用完整的面板,但同樣的問題。基於組合框的大小正在改變。一旦它達到最小尺寸,剩餘的大小,因爲它雖然組合框添加,我想要添加組合框垂直.Grid佈局水平添加。我已經使用了框佈局,但組合框佔據了完整的面板,並且兩個combo's.jPanelStartDate.setLayout(新BoxLayout(jPanelStartDate,BoxLayout.Y_AXIS))之間沒有空格。 – suma2020

+0

@ suma2020我根據你的評論調整了我的答案。請看現在答案是否更有幫助。 – m1o2