我只是为了练习而创建一个简单的GUI。我想在JFrame中有几个文本框,但我创建的JTextField占用了整个框架。我试过做.setSize,但没用。
JFrame
public static Component textbox(String x){
JLabel lbltAm= new JLabel(x);
JTextField tftAm = new JTextField(20);
lbltAm.setLabelFor(tftAm);
lbltAm.setFont(new Font("Serif", Font.PLAIN, 18));
tftAm.setSize(10, 10);
return tftAm;
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Tip Calculator");
//Add Textbox
frame.add(textbox("TipAmmount"));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.gray);
frame.setPreferredSize(new Dimension(250, 400));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
这是因为你没有使用任何布局,我建议使用FlowLayout和GridBagLayout。
不返回JTextField,而是返回一个Panel对象,并将JTextField和Jlabel对象添加到面板中。你可以使用我使用过的任何布局BorderLayout
public static Component textbox(String x){
JPanel panel = new JPanel(new BorderLayout());
JLabel lbltAm= new JLabel(x);
JTextField tftAm = new JTextField(20);
lbltAm.setLabelFor(tftAm);
lbltAm.setFont(new Font("Serif", Font.PLAIN, 18));
tftAm.setSize(10, 10);
panel.add(lbltAm, BorderLayout.NORTH);
panel.add(tftAm, BorderLayout.CENTER);
return panel;
}
有多个布局,您可以使用这些布局来布局面板中的组件。看看
将组件直接添加到JFrame不是一个好的做法像这样使用
frame.getContentPane().add(component)
或者如果使用边界布局,你可以像这样添加
frame.getContentPane().add(compent,BorderLayout.CENTER);