如何将 2 个 Jlabel 对象放入 JFrame 中



我是Java Swing的新手,我有以下问题:

我有一个名为 LoginFrame 的类,它必须显示一个包含登录表单的 JFrame 对象:

package com.techub.crystalice.gui.login;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.jdesktop.application.SingleFrameApplication;
import com.techub.crystalice.gui.Constants;
import com.techub.crystalice.gui.GUI;

public class LoginFrame extends SingleFrameApplication {
    @Override
    protected void startup() {
        // TODO Auto-generated method stub
        System.out.println("DENTRO: LoginFrame() ---> startup()");
        JFrame loginFrame = this.getMainFrame();
        Dimension minimumSize = new Dimension(400, 250);
        loginFrame.setMinimumSize(minimumSize);
        loginFrame.setTitle("XCloud Login");
        JLabel userName = new JLabel("Username:");
        JLabel pswd = new JLabel("Password:");
        loginFrame.add(userName);
        loginFrame.add(pswd);
        show(loginFrame);
        //show(new JLabel("Hello World"));
    }
    public static void main(String[] args) {
        System.out.println("DENTRO: LoginFrame() ---> main()");
        launch(LoginFrame.class, args);
    }
}

abstrac 类 SingleFrameApplication 自动为我提供了 JFrame 对象,我在其上设置了一些属性(维度和标题)。

然后我尝试添加 2 个 JLabel 对象,分别显示字符串"用户名:"和"密码:**

问题是,通过这种方式,它只在 JFrame 的中心(垂直)显示字符串"密码",而不是在另一个下方显示字符串"密码"。

为什么?如何放置 2 个 JLabel,以及如何将它们以正确的方式放置在我的 JFrame 中?

我错过了什么?

安德里亚

简单的解决方案:将 JLabels 放入 JPanel 中,然后将该 JPanel 放入 JFrame。

更长的答案:您的问题在于布局。默认情况下,JFrame(或者更准确地说,其内容窗格)使用 BorderLayout,当您向其中添加组件而不使用 int 常量协参数时,默认情况下将组件放置在 BorderLayout.CENTER 位置。最后添加的组件将涵盖之前添加的所有组件。但是,JPanel 默认使用 FlowLayout,并且添加到其中的所有组件将根据 FlowLayout 的规则一个接一个地添加。

这一切的关键是阅读有关如何使用 Swing 布局管理器的教程,然后与它们一起玩以更好地学习使用它们。