代码之家  ›  专栏  ›  技术社区  ›  Jonas

如何控制JavaSwing中的JTraveField的宽度?

  •  17
  • Jonas  · 技术社区  · 15 年前

    我试图在一行上有几个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); }};
        }
    
    }
    
    4 回复  |  直到 7 年前
        1
  •  6
  •   camickr    15 年前

    所有回转组件都具有首选尺寸。文本组件的首选大小基于组件的文本。因此,通常情况下,部件按其首选尺寸进行喷漆。

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

    如果您需要更多帮助,请发布 SSCCE 这实际上说明了您遇到的尺寸问题。

    编辑:

    根据最新要求,您可以使用 Relative Layout .

        2
  •  32
  •   animuson    13 年前
    yourTextField = new JTextField("", 20);
    

    如果您这样启动它,它会将textfield设置为空,并有20列

        3
  •  5
  •   Psychosis404    7 年前

    试试这个:

    textfield.setPreferredSize(new Dimension(int width, int height));
    
        4
  •  0
  •   Xorty    15 年前
    // 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));