在Java Swing Box中伸展

时间:2010-10-28 23:47:58

标签: java

我有一个代码:

    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的宽度上拉伸。我尝试使用BoxLayout和它的Alignment_X,但这不起作用。

请你告诉我,该怎么办 - 如何避免伸展?

1 个答案:

答案 0 :(得分:1)

大多数swing布局将使用首选大小和最小/最大大小来调用setSize。这里的关键是获得正确的首选项和最小项,以便它们不会收缩太多,然后插入一个支柱(Box#createHorizo​​ntalStrut)来填充您不需要组件的空间。

对于像这样的复杂布局,请考虑SpringLayout,它确实具有更高的学习曲线,但是一旦习惯了它,将允许您更自然地说明您想要的约束。