我有JPanel
看起来像这样:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
...
panel.add(jTextField1);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton1);
panel.add(Box.createVerticalStrut(30));
panel.add(jTextField2);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton2);
... //etc.
我的问题是JTextField
垂直变大。我希望它们只对单行足够高,因为这是用户可以输入的全部内容。按钮很好(它们不会垂直扩展)。
有没有办法阻止JTextField
扩展?我对Swing很新,所以如果我做的一切都非常糟糕,请告诉我。
答案 0 :(得分:40)
textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
答案 1 :(得分:29)
如果您希望宽度不断变化,只需将其设置为MAX INT即可。所以......
textField.setMaximumSize( new Dimension(Integer.MAX_VALUE, textField.getPreferredSize().height) );
答案 2 :(得分:1)
在我的情况下,我需要所有答案的组合才能正常工作。如果我不使用胶水,它不会垂直居中;如果我不限制最大尺寸,它会垂直延伸;如果我限制宽度和高度,它太小,只有足够宽以包含初始化文本。
textField = new JTextField("Hello, world!");
textField.setMaximumSize(
new Dimension(Integer.MAX_VALUE,
textField.getPreferredSize().height));
Box box = Box.createVerticalBox();
box.add(Box.createVerticalGlue());
box.add(textField);
box.add(Box.createVerticalGlue());
答案 3 :(得分:0)
设置最大高度。 或将它们放在滚动区域
答案 4 :(得分:-1)
JPanel panel = new JPanel();
Box box = Box.createVerticalBox();
JTextField tf = new JTextField(8);
box.add(tf);
panel.add(box);
frame.getContentPane().add(panel, BorderLayout.CENTER);