如何在JFrame中调整JTextField的大小?

时间:2015-06-25 16:48:37

标签: java swing user-interface

我只是为练习创建一个简单的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);

2 个答案:

答案 0 :(得分:0)

这是因为您没有使用我建议使用FlowLayout和GridBagLayout的任何布局。

答案 1 :(得分:0)

而不是返回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;
}

有多种布局可用于布局Panel中的组件。 have a look

将组件直接添加到JFrame不是一个好习惯 像这样使用它

  

frame.getContentPane()。添加(组分)

或者如果使用borderlayout,您可以像这样添加

  

frame.getContentPane()。add(compnent,BorderLayout.CENTER);