8

我无法添加JTextFieldJFrame. 我的JFrame包含 aJLabel和 a 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 .

具有 JLabel 的框架

然后我添加了 JTextField 。

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

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

    frame.setVisible(true);

但随后它显示这样的输出。

具有 JLabel 和 JTextField 的框架

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

4

3 回答 3

8

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

的内容窗格默认JFrame使用BorderLayout管理器。(请参阅如何使用 BorderLayout

在我的应用程序中,a 总是最终使用MigLayout管理器,但首先您可能想熟悉一下布局管理器。(请参阅布局管理器的视觉指南

于 2013-03-02T09:25:26.043 回答
3

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

当您Container使用 single-argument将元素添加到 a 时add,您并没有指定您想要它们的位置,因此布局管理器会随意选择一个位置。OTOH 如果您指定约束(使用重载的 add),那么您可以更好地控制元素的放置位置。检查每个布局管理器的文档以了解它们是如何工作的以及它支持哪些约束。

对于您当前的情况,您可以使用中间体JPanelFlowLayout默认情况下LayoutManager- 对于仍在学习的人来说,这是最简单的恕我直言),而不是直接将元素添加到内容窗格,或者只是将其布局更改为其他内容。

于 2013-03-02T09:25:49.230 回答
-1

AJFrame只能有一个组件(除非您使用它有一个BorderLayout)。解决方案是使用JPanel. 您将对象添加到 JPanel,然后JPanelJFrame. 你也需要添加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();}

这应该有效。

于 2013-03-02T10:17:23.007 回答