Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建JOptionPane及其具有固定宽度和高度的对象_Java_Swing_Layout Manager - Fatal编程技术网

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

Java 创建JOptionPane及其具有固定宽度和高度的对象,java,swing,layout-manager,Java,Swing,Layout Manager,我正在尝试创建一个像这样的JOptionPane。我尝试了很多布局管理器,但是(GridBagLayout,GridLayout,AbsoluteLayout)我还没有成功 例如,如果我使用GridBagLayout,ipadx确实很有用,但是JTextFields宽度取决于它们的文本长度 如果使用GridLayout,则每个对象的宽度都属于列宽度 如果我使用AbsoluteLayout,JOptionPane不会将其自身扩展到带有对象的已配置JPanel边界 我需要固定的对象宽度、高度和JOp

我正在尝试创建一个像这样的
JOptionPane
。我尝试了很多布局管理器,但是(
GridBagLayout
GridLayout
AbsoluteLayout
)我还没有成功

例如,如果我使用
GridBagLayout
ipadx
确实很有用,但是
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...");
}

同意JDialog可以让你完全控制

我需要知道如何通过JOptionPane制作同样的东西

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

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

您可以签出UIManager控制的其他属性的列表。请注意,并不能保证所有LAF都将管理相同的属性。

感谢@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());
    }

你知道……在我看来,为了让JOptionPane的外观和反应完全符合你的要求,使用JDialog更好、更容易。我的意思是,它也可以是模态的。事实上,我会使用
JDialog
,但我需要知道如何通过
JOptionPane
来实现同样的功能。让我们看看您已经尝试过的功能。我推荐BoxLayout。我建议使用
BoxLayout
(Y轴)包含
JPanel
行,每个行设置为
FlowLayout
。如果
GridLayout
/
gridbagloayout
对您不起作用,则适用于自适应网格布局。代码在
size.width=100中返回异常如果更改OptionPane大小,如果使用GridLayout,则所有对象将扩展到OptionPane的最后一个大小。我将使用BoxLayout进行此操作,正如@ControlAltDel和@Gorbles所说的那样。@BlackWhite,在Windows7上使用JDK8对我来说很好。