如何在Java Swing中控制JTextField的宽度?

我试图在一行上有几个JTextFields,但我不希望它们具有相同的宽度。 如何控制宽度并使其中一些宽度比其他宽度更宽? 我希望他们一起占据总宽度的100%,所以如果我可以使用某种形状的东西会很好。

我试过.setColumns()但它没有意义。

这是一个示例,我使用三行,其中三个字符串应显示为列:

 import java.awt.GridLayout; import javax.swing.BoxLayout; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class RowTest extends JPanel { class Row extends JComponent { public Row(String str1, String str2, String str3) { this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); JTextField fld1 = new JTextField(str1); JTextField fld2 = new JTextField(str2); JTextField fld3 = new JTextField(str3); fld1.setColumns(5); // makes no sense this.add(fld1); this.add(fld2); this.add(fld3); } } public RowTest() { this.setLayout(new GridLayout(5,0)); this.add(new Row("Short", "A long text that takes up more space", "Short again")); this.add(new Row("Longer but short", "Another long string", "Short")); this.add(new Row("Hello", "The long field again", "Some info")); } public static void main(String[] args) { new JFrame() {{ this.getContentPane().add(new RowTest()); this.pack(); this.setVisible(true); }}; } } 

所有Swing组件都有一个首选大小。 文本组件的首选大小基于组件的文本。 因此,通常将组件涂成其优选尺寸。

所以我没有看到你的代码片段的问题。 每个文本字段应具有不同的首选大小。 此外,在调整框架大小时,将调整宽度,因为BoxLayout将尝试将每个组件的大小调整为其最大/最小大小。

如果您需要更多帮助发布您的SSCCE ,实际上会显示您遇到的尺寸问题。

编辑:

根据最新要求,您可以使用相对布局 。

 yourTextField = new JTextField("", 20); 

如果你这样开始它将textfield设置为空并且有20个collumns

尝试这个:

 textfield.setPreferredSize(new Dimension(int width, int height)); 
 // 1. create JTextField yourTextField = new JTextField(); // 2. store default height int defaultHeight = yourTextField.getSize().getHeight(); // 3. set custom width and default height yourTextField.setSize(new Dimension(yourWidth, defaultHeight));