用户界面-选择JDialog Java的布局



我很难为我的JDialog选择正确的布局。我想在每一行都有一个组件,在它之前有一个标签。

我试图设置面板的布局为空,然后使用setBounds,但它只是太混乱(特别是我的第一个gui代码)。

我也尝试了GridLayout(上面指定的尺寸),但仍然没有得到预期的布局(我在每一行得到一个组件,没有它的标签)。

下面是我的JDialog和它的父框架的示例代码:
public class Test {
private JDialog dialogTest;
private JPanel dialogTestPane;
private JPanel buttonDialogPane;
private JPanel okCancelPane;
private JTextField aTextField;
private JLabel textLabel;
private JLabel buttonLabel;
private JButton buttonTest;
private JButton buttonDialog;
private JButton buttonOk;
private JButton buttonCancel;
private JFrame testFrame;
public Test(){
    createMainFrame();
}
private void createDialog(){
        //Set jdialog
     dialogTest = new JDialog();
     dialogTest.setLayout(new BorderLayout());
     dialogTestPane = new JPanel();
     //dialogTestPane.setLayout(null);
     dialogTestPane.setLayout(new GridLayout(5,5,5,5));
     textLabel = new JLabel("Text:");
     //textLabel.setBounds(10,20,46,16);
     dialogTestPane.add(textLabel);
     aTextField = new JTextField();
    // aTextField.setBounds(70,20,80,45);
     dialogTestPane.add(aTextField);
     buttonLabel = new JLabel("Button:");
    // buttonLabel.setBounds(10,60,46,16);
     dialogTestPane.add(buttonLabel);
     buttonTest = new JButton("Test");
     //buttonTest.setLocation(70,60);
     dialogTestPane.add(buttonTest);
     dialogTest.add(dialogTestPane, BorderLayout.CENTER);
     //Ok,cancel buttons
     okCancelPane = new JPanel(new FlowLayout(FlowLayout.RIGHT));
     buttonOk = new JButton("Ok");
     buttonCancel = new JButton("Cancel");
     okCancelPane.add(buttonOk);
     okCancelPane.add(buttonCancel);
     dialogTest.add(okCancelPane, BorderLayout.SOUTH);
     dialogTest.setVisible(true);
}
private void createMainFrame(){
       //Set frame of buttonTest -> No layout issues here
     testFrame = new JFrame();
     buttonDialogPane = new JPanel(new FlowLayout());
     buttonDialog = new JButton("Get Dialog");
     buttonDialogPane.add(buttonDialog);
     testFrame.add(buttonDialogPane);
     //Showing Dialog
     buttonDialog.addActionListener((ActionEvent ae) -> {
         createDialog();
     });
     testFrame.setVisible(true);
}

}

Main类

public class TestMain {
 public static void main(String[] args){
       Test test = new Test();
    }

}

任何帮助将不胜感激!

有很多方法可以做你想做的事情,所以我将介绍我喜欢的方法。我使用的是GroupLayout,你可以在这里了解更多:如何使用GroupLayout

实施

首先创建组件

dialogTestPane = new JPanel();
textLabel = new JLabel("Text:");
aTextField = new JTextField();
buttonLabel = new JLabel("Button:");
buttonTest = new JButton("Test");

那么你必须创建GroupLayout并将其设置为JPanel()

GroupLayout groupLayout = new GroupLayout(dialogTestPane);
groupLayout.setAutoCreateGaps(true);
dialogTestPane.setLayout(groupLayout);

现在你设置水平组,在你的例子中,这意味着你创建了两个组,一个用于标签,另一个用于组件。

groupLayout.setHorizontalGroup(groupLayout.createSequentialGroup()
        .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(textLabel)
                .addComponent(buttonLabel))
        .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(aTextField)
                .addComponent(buttonTest)));

下一步是设置垂直组,这意味着你为每个标签和组件创建组。

groupLayout.setVerticalGroup(groupLayout.createSequentialGroup()
        .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(textLabel)
                .addComponent(aTextField))
        .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(buttonLabel)
                .addComponent(buttonTest)));

最后你要把JPanel添加到superior

dialogTest.add(dialogTestPane);

就是这样!对于更大数量的组件,我建议将标签和组件保持在数组中,并在循环中设置组布局,以避免数百行仅用于设置布局。

它可以通过其他方式完成,例如使用MiGLayout或混合其他布局管理器。有用链接:

  1. 使用布局管理器
  2. MiGLayout

相关内容

  • 没有找到相关文章