我试图在单个行上有几个JTextField,但是我不希望它们具有相同的宽度.如何控制宽度并使其中的一些比其他宽度更宽?我想要他们一起占据总宽度的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实际演示您遇到的大小问题.
编辑:
根据最新的要求,您可以使用Relative Layout.