Java 一个JLabel卡在机架的拐角处
我有一个标签(在我的程序中称为thirdlabel),当所有其他标签都正常工作时,它仍然粘在框架的左下方。我尝试了repaint()、pack()等。这非常有趣,我想弄清为什么它不起作用。 到目前为止,我猜测它与LayoutManager有关(因为我使用了setLayout(null)) 图像示例: 代码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))-
正如你所看到的,我创建了一个新标签(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);