2010-10-28 63 views
1

伸展我有一個代碼:中的Java Swing箱

Box box_general = Box.createHorizontalBox(); 
    Box box_panel1 = Box.createVerticalBox(); 
    Box box_panel2 = Box.createVerticalBox(); 

    JPanel jpanel_1 = new JPanel(); 

    jpanel_1.setPreferredSize(new Dimension(50, 152)); 
    jpanel_1.setOpaque(true); 
    jpanel_1.setBorder(BorderFactory.createLineBorder(Color.BLUE)); 

    JPanel jpanel_2 = new JPanel(); 

    jpanel_2.setPreferredSize(new Dimension(340, 152)); 
    jpanel_2.setOpaque(true); 
    jpanel_2.setBorder(BorderFactory.createLineBorder(Color.RED)); 

    JTextField jtxtf_populationSize = new JTextField(); 
    jtxtf_populationSize.setSize(10, 20); 
    JTextField jtxtf_processorsAmount = new JTextField(); 

    JButton jbtn_loadProcesses = new JButton("File path"); 
    box_panel1.add(Box.createRigidArea(new Dimension(0,4)));   
    box_panel1.add(jtxtf_processorsAmount); 
    box_panel1.add(Box.createRigidArea(new Dimension(0,20)));  
    box_panel1.add(jbtn_loadProcesses); 
    jpanel_1.add(box_panel1); 

    JLabel jlbl_populationSize = new JLabel("Enter the population size"); 
    JLabel jlbl_processorsAmount = new JLabel("Enter the amount of processors"); 
    JLabel jlbl_loadProcesses = new JLabel("Load processes from file"); 

    jlbl_populationSize.setFont(font); 
    jlbl_processorsAmount.setFont(font); 
    jlbl_loadProcesses.setFont(font); 

    box_panel2.add(jlbl_populationSize); 
    box_panel2.add(Box.createRigidArea(new Dimension(0,4)));   
    box_panel2.add(jlbl_processorsAmount); 
    box_panel2.add(Box.createRigidArea(new Dimension(0,15)));  
    box_panel2.add(jlbl_loadProcesses); 
    jpanel_2.add(box_panel2); 

    box_general.add(jpanel_2); 
    box_general.add(Box.createRigidArea(new Dimension(10,0))); 
    box_general.add(jpanel_1); 

它創建了3盒,其中一般框中包含其他兩盒。問題是:在框中所有的組件都被拉伸成寬度。例如,有一行jtxtf_populationSize.setSize(10, 20);,但此文本字段在寬度上在box_panel1中拉伸。我試着用它的Alignment_X使用BoxLayout,但這不起作用。

請問您,請教,我該怎麼辦 - 如何避免拉伸?

回答

1

大部分擺動佈局將使用首選大小以及調用setSize時的最小/最大大小。這裏的關鍵是獲得正確的首選項和最小項,以便它們不會過多縮小,然後插入支柱(Box#createHorizo​​ntalStrut)以填充不需要組件的空間。

對於像這樣的複雜佈局,可以考慮SpringLayout,雖然它有更高的學習曲線,但是一旦你習慣了它,它會讓你更自然地聲明你想要的約束。

+0

謝謝你,我會盡量玩它 – Dmitry 2010-10-28 23:58:44

+0

我想你說的是「最大值」而不是「最小值」。我已經添加setMaximumSize,它的工作 – Dmitry 2010-10-29 00:08:25

+0

謝謝,我更新,以反映在這種情況下它是最大的 – 2010-10-29 00:15:50