1

私はJava Swingの初心者で、次の問題があります。

ログインフォームを含むJFrameオブジェクトを表示する必要があるLoginFrameという名前のクラスがあります。

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);
    }

}

抽象クラスSingleFrameApplicationは、いくつかのプロパティ (ディメンションとタイトル) を設定するJFrameオブジェクトを自動的に提供します。

次に、文字列「Username:」と「Password:**」をそれぞれ表示する 2 つのJLabelオブジェクトを追加しようとしました。

問題は、この方法では文字列「Password」のみが JFrame の中央 (垂直方向) に表示され、上下に表示されないことです。

なんで?2 つの JLabel を配置するにはどうすればよいですか?また、それらを JFrame 内に正しい方法で配置するにはどうすればよいですか?

私は何が欠けていますか?

TNX

アンドレア

4

1 に答える 1

4

簡単な解決策: JLabels を JPanel に配置し、その JPanel を JFrame に配置します。

より長い答え: あなたの問題はレイアウトにあります。JFrame (より正確には、その contentPane) はデフォルトで BorderLayout を使用し、int 定数の共同パラメーターを使用せずにコンポーネントを追加すると、デフォルトでコンポーネントを BorderLayout.CENTER の位置に配置します。最後に追加されたコンポーネントは、以前に追加されたすべてのコンポーネントをカバーします。ただし、JPanel はデフォルトで FlowLayout を使用し、それに追加されたすべてのコンポーネントは、FlowLayout の規則に従って次々に追加されます。

これらすべての鍵は、Swing レイアウト マネージャーの使用方法に関するチュートリアルを読んでから、それらを使って遊んで、それらの使用方法をよりよく学ぶことです。

于 2013-11-06T15:20:00.267 に答える