Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个JLabel卡在机架的拐角处_Java_Swing_Jframe_Jlabel_Layout Manager - Fatal编程技术网

Java 一个JLabel卡在机架的拐角处

Java 一个JLabel卡在机架的拐角处,java,swing,jframe,jlabel,layout-manager,Java,Swing,Jframe,Jlabel,Layout Manager,我有一个标签(在我的程序中称为thirdlabel),当所有其他标签都正常工作时,它仍然粘在框架的左下方。我尝试了repaint()、pack()等。这非常有趣,我想弄清为什么它不起作用。 到目前为止,我猜测它与LayoutManager有关(因为我使用了setLayout(null)) 图像示例: 代码 正如你所看到的,我创建了一个新标签(fourthlabel),效果很好。我正在使用EclipseIDE。我猜它与LayoutManager有关(因为我使用了setLayout(null))-

我有一个标签(在我的程序中称为thirdlabel),当所有其他标签都正常工作时,它仍然粘在框架的左下方。我尝试了repaint()、pack()等。这非常有趣,我想弄清为什么它不起作用。 到目前为止,我猜测它与LayoutManager有关(因为我使用了setLayout(null))

图像示例:

代码


正如你所看到的,我创建了一个新标签(fourthlabel),效果很好。我正在使用EclipseIDE。

我猜它与LayoutManager有关(因为我使用了setLayout(null))-问题是您没有使用布局管理器。空布局不是布局管理器。Swing设计用于布局管理器。阅读上Swing教程中的部分以了解工作示例。您还可以使用不同的布局嵌套面板,以实现所需的布局。布局管理器迫使您从逻辑上考虑如何显示组件。最终,它将使代码更易于维护。@camickr我是布局管理器的初学者,但我希望我的程序位于特定的位置,并认为布局管理器可能会阻止我这样做。在看了这些示例之后,它们似乎更适合于按钮(我没有看到任何关于设置特定边界的内容)。我需要的(基于您的链接)是最接近SpringLayout(SpringForm)的。这可行吗?我不知道你想要什么样的布局。我所看到的是标签显示在所有的地方,没有明显的逻辑和随机间隔。正如我所说,您不必使用单一的布局管理器。如有必要,可以在不同面板上对零部件进行逻辑分组。GridBagLayout比SpringLayout更易于使用,并且可以轻松地用于以类似网格的模式显示组件。为什么要给“文本字段”变量名加上“文本区域”呢。有一个JTextArea组件,所以非常混乱。这是我的问题。-我的答案是花时间学习布局管理器。正如您所发现的,元件尺寸/位置的硬编码值容易出错。看起来它们更多的是用于按钮-然后你不了解布局管理器,这就是为什么你实际上需要阅读教程,下载工作示例并使用它们。布局管理器适用于任何组件。这些示例仅显示布局管理器如何定位组件的概念。您可以使用组件组合的任何组件。@camickr我明白了,所以我认为错误来自setLayout(null)。我需要使用一个实际的layoutmanager来让它正常工作。谢谢你让我知道!我将阅读你提到我的链接,并使用其中一个布局管理器。
 public void secondframe() {
        JFrame newframe = new JFrame("newframe");
        //newframe.pack(); this is not necessary
        newframe.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        newframe.setTitle("Personal Information");
        newframe.setSize(1000, 1000);
        newframe.setLocationRelativeTo(null);
        Container secondContainer = getContentPane();
        JTextField firstnameArea = new JTextField("");
        JTextField middleinitialArea = new JTextField("");
        JTextField lastnameArea = new JTextField("");
        JLabel firstname = new JLabel("First Name");
        JLabel middleinitial = new JLabel("Middle Initial");
        JLabel lastname = new JLabel("Last Name");
        JLabel lastname2 = new JLabel("Last Name");
        secondContainer.setLayout(null);
        firstnameArea.setBounds(100, 100, 150, 20);
        middleinitialArea.setBounds(400, 100, 50, 20);
        lastnameArea.setBounds(780, 100, 150, 20);
        firstname.setBounds(20, 100, 100, 20);
        middleinitial.setBounds(300, 100, 100, 20);
        lastname.setBounds(300, 100, 100, 20);
        lastname2.setBounds(300, 100, 100, 20);
        newframe.getContentPane().add(firstnameArea);
        newframe.getContentPane().add(middleinitialArea);
        newframe.getContentPane().add(lastnameArea);
        newframe.getContentPane().add(firstname);
        newframe.getContentPane().add(middleinitial);
        newframe.getContentPane().add(lastname);
        newframe.getContentPane().add(lastname2);
        repaint();
        newframe.setVisible(true);