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

时间:2013-11-06 15:18:13

标签: java swing jframe awt jlabel

我是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中以正确的方式放置它们?

我错过了什么?

TNX

安德烈

1 个答案:

答案 0 :(得分:4)

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

更长的答案:你的问题在于布局。默认情况下,JFrame(或更准确地说,它的contentPane)使用BorderLayout,当您在不使用int常量co-parameters的情况下向其添加组件时,默认情况下将组件放入BorderLayout.CENTER位置。添加的最后一个组件将涵盖之前添加的所有组件。然而,JPanel默认使用FlowLayout,并且根据FlowLayout的规则,添加到其中的所有组件将依次添加。

所有这一切的关键是阅读tutorial on how to use Swing layout managers,然后与它们一起玩,以便更好地学习使用它们。