我无法弄清楚为什么我的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的大小与其他所有项目相同。
答案 0 :(得分:2)
未将宽度设置为首选宽度的原因是传递给TextField构造函数的整数参数(在示例中为5)指示字段中的列数。该数字与字段的当前字体提供的度量一起使用,以计算字段的首选宽度。它不限制用户可以输入的字符数。为此,您可以使用格式化的文本字段或文档侦听器。
尝试减小列宽。
答案 1 :(得分:1)
这就是GridLayOut在Swing中的工作方式。它将为其中的所有组件提供相等的宽度。 如果您想要更多受控行为,请使用GridBagLayOut
您可以检查以下链接: