为什么我的TextField不能达到我所命令的大小?

时间:2018-12-10 05:16:47

标签: java user-interface

我无法弄清楚为什么我的TextField拒绝达到我要求的大小。我希望从你们那里获得一些见识。

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.TextField;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class HW09 extends JFrame{

    public HW09() {
        this.setVisible(true);
        this.setSize(455, 155);


        TextField cartonsPerShipmentBox = new TextField("5");
        cartonsPerShipmentBox.setMaximumSize(new Dimension(20, 20));
        Button calculateButton = new Button("Calculate!");

        JPanel middleContainer = new JPanel();
        middleContainer.setLayout(new GridLayout(2, 4));
        middleContainer.add(new JLabel("Cartons Per Shipment: "));

        //CARTON AMOUNT
        middleContainer.add(cartonsPerShipmentBox);

        //TOTAL BOX
        middleContainer.add(new JLabel("Total: "));




        middleContainer.add(new JLabel("Items per carton: "));

        //ITEMS PER CARTON BOX
        middleContainer.add(new Button("OOF"));

        //CALCULATE BUTTON
        middleContainer.add(calculateButton);

        this.add(middleContainer);


    }

    public static void main(String[] args) {

        HW09 hw = new HW09();

    }

}

我想要这个,因为即使我的项目位于网格布局中,TextField确实对于我想要的东西来说也太大了,这使程序看起来很奇怪。我希望文本字段很小,因为我用维度(20,20)表示。但是,当我运行程序时,它使TextField的大小与其他所有项目相同。

2 个答案:

答案 0 :(得分:2)

未将宽度设置为首选宽度的原因是传递给TextField构造函数的整数参数(在示例中为5)指示字段中的列数。该数字与字段的当前字体提供的度量一起使用,以计算字段的首选宽度。它不限制用户可以输入的字符数。为此,您可以使用格式化的文本字段或文档侦听器。

尝试减小列宽。

答案 1 :(得分:1)

这就是GridLayOut在Swing中的工作方式。它将为其中的所有组件提供相等的宽度。 如果您想要更多受控行为,请使用GridBagLayOut

您可以检查以下链接:

Java change JTextField size inside a GridLayout