当前位置: 首页 > 知识库问答 >
问题:

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

段干安和
2023-03-14

我有一个名为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对象,我在该对象上设置了一些属性(维度和标题)。

然后尝试添加两个JLabel对象,分别显示字符串“username:”和“password:**

TNX

安德里亚

共有1个答案

霍建柏
2023-03-14

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

更长的答案:你的问题是布局。默认情况下,JFrame(或者更正确地说,它的contentPane)使用BorderLayout,当您在不使用int常量辅助参数的情况下向其中添加组件时,默认情况下您将该组件放置到BorderLayout.Center位置。最后添加的组件将覆盖之前添加的所有组件。然而,JPanel默认使用FlowLayout,添加到它的所有组件都将按照FlowLayout的规则依次添加。

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

 类似资料: