无法将JTextField添加到JFrame

时间:2013-03-02 09:21:43

标签: java swing jframe jtextfield layout-manager

我无法将JTextField添加到JFrame。我的JFrame包含JLabelJTextField。 首先,我添加了JLabel,它正在运行。这是代码。

private static void createandshowGUI()
     {

    JFrame frame =new JFrame("HelloSwing");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setBackground(Color.red);
    frame.setSize(200,200);

    JLabel label=new JLabel("New To Java!!");
    frame.getContentPane().add(label);
    frame.setVisible(true);
}
public static void main(String[] args) {
    createandshowGUI();}   //and it shows the output like below .

Frame having JLabel

然后我添加了JTextField。

    JLabel label=new JLabel("New To Java!!");
    frame.getContentPane().add(label);

   JTextField jtf=new JTextField();
   frame.getContentPane().add(jtf);

    frame.setVisible(true);

然后它会显示这样的输出。

Frame having JLabel and JTextField

请有人帮我解决这个问题。我可以向JFrame添加多个组件吗?因为我是Java的新手,我在框架,ContentPane和Layouts之间感到困惑。

3 个答案:

答案 0 :(得分:8)

实际上您已成功添加JTextField。您遇到的问题源于布局管理器,它在整个框架中将其拉伸。

JFrame的内容窗格默认使用BorderLayout管理器。 (见How to Use BorderLayout

在我的应用程序中,总是最终使用MigLayout管理器,但首先您可能希望熟悉布局管理器。 (见A Visual Guide to Layout Managers

答案 1 :(得分:3)

默认情况下,您的ContentPane有一个BorderLayout,只接受一个元素(默认位置 - 中心)。添加第二个元素(JTextField)后,它替换了最后一个元素(JLabel)。

使用单参数Containeradd添加元素时,您并未指定所需位置,因此布局管理器会随意选择一个位置。 OTOH如果您指定约束(使用overloaded add),那么您可以更好地控制元素的放置位置。检查每个布局管理器的文档,了解它们的工作方式以及它支持的约束条件。

对于您目前的情况,您可以使用中间JPanelLayoutManager作为默认{{1}} - 最简单的恕我直言,但仍在学习的人),而不是直接添加元素内容窗格,或者只是将其布局更改为其他内容。

答案 2 :(得分:-1)

JFrame只能有一个组件(除非您使用的是BorderLayout)。解决方案是使用JPanel。 您将对象添加到JPanel,然后将JPanel添加到JFrame。您还需要添加import javax.swing.JPanel;。你可以这样做:

private static void createandshowGUI()
{
    JFrame frame =new JFrame("HelloSwing");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setBackground(Color.red);
    frame.setSize(200,200);

    JPanel panel = new JPanel(); //Create a JPanel

    JLabel label=new JLabel("New To Java!!");
    panel.add(label); // Add the label to the panel

    JTextField jtf = new JTextField();
    panel.add(jtf); // Add the JTextField to the panel

    frame.getContentPane().add(panel); // Add the panel to the JFrame
    frame.setVisible(true);
}
public static void main(String[] args) {
    createandshowGUI();}

这应该有用。