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对我来说很好。