将面板放在java中的框布局行中

时间:2012-10-12 11:01:04

标签: java swing layout layout-manager boxlayout

我在下面的代码中创建了一个标签页面。 我希望每个布局在整个框布局的一行中,但我希望元素保持原始大小而不是展开以填充整个窗口的宽度。有谁知道我需要改变哪些代码行?或者最好的方法是什么?!附上的图片显示了目前的样子

enter image description here

public void createPage4() {
    panel4 = new JPanel();
    panel4.setLayout(new BoxLayout(panel4, BoxLayout.Y_AXIS));
    navigatePanel = new JPanel();
    navigatePanel.setLayout(new BoxLayout(navigatePanel, BoxLayout.X_AXIS));
    previousButton.setText("Previous");
    previousButton.setEnabled(false);
    navigatePanel.add(previousButton);
    navigatePanel.add(Box.createHorizontalStrut(10));
    indexTextField.setHorizontalAlignment(JTextField.CENTER);
    navigatePanel.add(indexTextField);
    navigatePanel.add(Box.createHorizontalStrut(10));
    ofLabel.setText("of");
    navigatePanel.add(ofLabel);
    navigatePanel.add(Box.createHorizontalStrut(10));
    maxTextField.setHorizontalAlignment(JTextField.CENTER);
    maxTextField.setEditable(false);
    navigatePanel.add(maxTextField);
    navigatePanel.add(Box.createHorizontalStrut(10));
    nextButton.setText("Next");
    nextButton.setEnabled(false);
    navigatePanel.add(nextButton);
    panel4.add(navigatePanel);
    displayPanel = new JPanel();
    displayPanel.setLayout(new GridLayout(5, 2, 4, 4));
    firstNameLabel.setText("First Name:");
    displayPanel.add(firstNameLabel);
    displayPanel.add(firstNameTextField);
    lastNameLabel.setText("Last Name:");
    displayPanel.add(lastNameLabel);
    displayPanel.add(lastNameTextField);
    panel4.add(displayPanel);
}

图像

image

2 个答案:

答案 0 :(得分:2)

  • BoxLayout接受来自Min, Max and PreferredSize
  • JComponents
  

我希望每个布局在整个盒子布局的一行中,但我希望元素保持原始大小而不是展开以填充整个窗口的宽度

答案 1 :(得分:2)

最简单的方法是将您的panel4添加到使用GridBagLayout的其他面板,然后将 面板添加到容器中。然后它将居中,没有任何东西会在调整大小时拉伸。

JPanel centeredPanel = new JPanel(new GridBagLayout());
centeredPanel.add(panel4);    // add this panel to the container

您还应该构建具有指定列数的文本字段,例如

indexTextField = new JTextField(20);