Java 无法将JTextField添加到JFrame

Java 无法将JTextField添加到JFrame,java,swing,jframe,jtextfield,layout-manager,Java,Swing,Jframe,Jtextfield,Layout Manager,我无法将JTextField添加到JFrame。我的JFrame包含一个JLabel和一个JTextField。 首先,我添加了JLabel,它正在工作。这是代码 private static void createandshowGUI() { JFrame frame =new JFrame("HelloSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getConten

我无法将
JTextField
添加到
JFrame
。我的
JFrame
包含一个
JLabel
和一个
JTextField
。 首先,我添加了
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 .

然后我添加了JTextField

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

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

    frame.setVisible(true);
但它显示的输出是这样的


请有人在这个问题上帮助我。我可以在JFrame中添加多个组件吗?因为我是Java新手,我对frame、ContentPane和布局感到困惑。

实际上您成功地添加了
JTextField
。您遇到的问题源于布局管理器,它将布局管理器延伸到整个框架

默认情况下,
JFrame
的内容窗格使用
BorderLayout
管理器。(见附件)


在我的应用程序中,a最终总是使用管理器,但首先您可能需要熟悉布局管理器。(请参见)

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

当您使用单个参数
add
将元素添加到
容器中时,您没有指定要在哪个位置添加元素,因此布局管理器会随意选择一个位置。如果指定约束(使用),则可以更好地控制元素的放置位置。检查每个布局管理器的文档,查看它们如何工作以及它支持哪些约束


对于您当前的情况,您可以使用中间版
JPanel
(它的默认设置是
LayoutManager
,这是对仍在学习的用户来说最简单的IMHO),而不是直接向内容窗格添加元素,或者简单地将其布局更改为其他内容。

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();}

这应该行得通。

+1表示结构良好的问题。+1表示MigLayout-我在寻找布局好的答案时也使用了它,但对于新手来说有点太复杂了。仍然+1@Sam但丹尼尔·里考斯基的回答更有用?;-)是的,当然。这就是我接受这个答案的原因。但是边界布局有点问题,我正要问。专家组给了我即时的结果非常感谢。