有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建JOptionPane及其具有固定宽度和高度的对象

enter image description here

我正在尝试创建一个类似这样的JOptionPane。我尝试了许多布局管理器,但是(GridBagLayoutGridLayoutAbsoluteLayout)我还没有成功

例如,如果我使用GridBagLayoutipadx确实很有用,但是JTextFields宽度取决于它们的文本长度

如果使用GridLayout,则每个对象的宽度都属于列宽

如果我使用AbsoluteLayout,则JOptionPane不会将自身扩展到带有对象的配置的JPanel边界

我需要固定的对象宽度、高度和JOptionPane当我们使用带有项目的JPanel创建它时,它应该扩展自身

哪个布局管理器最适合此任务?如果你建议的话,我会集中精力的

--编辑--

网格布局示例

JPanel panel = new JPanel( new GridLayout(8, 2) );

JLabel inforForNameLabel = new JLabel();
inforForNameLabel.setText("Long Label Name....................................");

final JTextField userNameTextField = new JTextField();
userNameTextField.setText("aaaaaaaaaaaaa");
userNameTextField.setEditable(false);

JLabel inforForNameSurname = new JLabel();
inforForNameSurname.setText("Long Label Name..................................");

final JTextField NameSurnameTextField = new JTextField();
NameSurnameTextField.setText("aaaaaaaaaaaa aaaaaaaaaa");

JLabel inforForStatsCombobox = new JLabel();
inforForStatsCombobox.setText("Long Label Name.................................");

JComboBox statComboBox = new JComboBox();
DefaultComboBoxModel dt = new DefaultComboBoxModel();
statComboBox.setModel(dt);
dt.addElement("USER.....");
dt.addElement("ADMIN");
statComboBox.setSelectedItem("USER.....");

JLabel inforForAuthCombobox = new JLabel();
inforForAuthCombobox.setText("Long Label Name.................................");

String[] authComboBoxObjects = { "READ", "READ/WRITE"};
final JComboBox authComboBox = new JComboBox(authComboBoxObjects);
authComboBox.setSelectedItem("READ/WRITE");

panel.add(inforForNameLabel);
panel.add(userNameTextField);
panel.add(inforForNameSurname);
panel.add(NameSurnameTextField);
panel.add(inforForStatsCombobox);
panel.add(statComboBox);
panel.add(inforForAuthCombobox);
panel.add(authComboBox);

String[] buttons = { "EXIT", "OK" };
int rc = JOptionPane.showOptionDialog(null, panel,"User Config", JOptionPane.INFORMATION_MESSAGE,JOptionPane.QUESTION_MESSAGE, null, buttons, buttons[1]);

if(rc == 0 || rc == -1){
     System.out.println(userNameTextField.getText());
}
else{
     System.out.println("Cancel...");
}

共 (2) 个答案

  1. # 1 楼答案

    感谢您对@ControlAltDel和@Gorbles的评论

    下面的代码构建选项窗格,在问题处选择所需的格式

        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    
        JLabel inforForNameLabel = new JLabel();
        inforForNameLabel.setText("Long Label Name.............................");
        inforForNameLabel.setAlignmentX(LEFT_ALIGNMENT);
    
        JLabel inforForNameLabel2 = new JLabel();
        inforForNameLabel2.setText("Long Label Name............................");
        inforForNameLabel2.setAlignmentX(LEFT_ALIGNMENT);
    
        final JTextField userNameTextField = new JTextField();
        userNameTextField.setText("aaaaaaaaaaaaa");
        userNameTextField.setEditable(false);
        userNameTextField.setPreferredSize(new Dimension(345, 30));
        userNameTextField.setMaximumSize(new Dimension(345, 30));
        userNameTextField.setAlignmentX(LEFT_ALIGNMENT);
    
        JLabel inforForNameSurname = new JLabel();
        inforForNameSurname.setText("Long Label Nameeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
        inforForNameSurname.setAlignmentX(LEFT_ALIGNMENT);
    
        final JTextField NameSurnameTextField = new JTextField();
        NameSurnameTextField.setText("aaaaaaaaaaaa aaaaaaaaaa");
        NameSurnameTextField.setPreferredSize(new Dimension(345, 30));
        NameSurnameTextField.setMaximumSize(new Dimension(345, 30));
        NameSurnameTextField.setAlignmentX(LEFT_ALIGNMENT);
    
        JLabel inforForStatsCombobox = new JLabel();
        inforForStatsCombobox.setText("Long Label Name....................");
        inforForStatsCombobox.setAlignmentX(LEFT_ALIGNMENT);
    
        JComboBox statComboBox = new JComboBox();
        DefaultComboBoxModel dt = new DefaultComboBoxModel();
        statComboBox.setModel(dt);
        dt.addElement("USER.....");
        dt.addElement("ADMIN");
        statComboBox.setSelectedItem("USER.....");
        statComboBox.setPreferredSize(new Dimension(200, 30));
        statComboBox.setMaximumSize(new Dimension(200, 30));
        statComboBox.setAlignmentX(LEFT_ALIGNMENT);
    
        JLabel inforForAuthCombobox = new JLabel();
        inforForAuthCombobox.setText("Long Label Name................................");
        inforForAuthCombobox.setAlignmentX(LEFT_ALIGNMENT);
    
        String[] authComboBoxObjects = { "READ", "READ/WRITE"};
        final JComboBox authComboBox = new JComboBox(authComboBoxObjects);
        authComboBox.setSelectedItem("READ/WRITE");
        authComboBox.setPreferredSize(new Dimension(200, 30));
        authComboBox.setMaximumSize(new Dimension(200, 30));
        authComboBox.setAlignmentX(LEFT_ALIGNMENT);
    
    
        panel.add(inforForNameLabel);
        panel.add(inforForNameLabel2);
        panel.add(userNameTextField);
        panel.add(inforForNameSurname);
        panel.add(NameSurnameTextField);
        panel.add(inforForStatsCombobox);
        panel.add(statComboBox);
        panel.add(inforForAuthCombobox);
        panel.add(authComboBox);
    
        String[] buttons = { "EXIT", "OK" };
        int rc = JOptionPane.showOptionDialog(null, panel,"User Config", JOptionPane.INFORMATION_MESSAGE,JOptionPane.QUESTION_MESSAGE, null, buttons, buttons[1]);
    
        if(rc == 0 || rc == -1){
            System.out.println("Cancel...");
        }
        else{
            System.out.println(userNameTextField.getText());
        }
    
  2. # 2 楼答案

    同意JDialog可以让你完全控制

    i need to know how can i make same thing via JOptionPane

    UIManager似乎控制着最小尺寸。在显示选项窗格之前,您可以使用以下命令覆盖:

    Dimension size = UIManager.getDimension("OptionPane.minimumSize");
    size.width = 100;
    UIManager.put("OptionPane.minimumSize", size);
    

    您可以在UIManager Defaults中查看由UIManager控制的其他属性的列表。请注意,并非所有LAF都能管理相同的物业