0

私はJavaが初めてで、(mysqlデータベース(xamppを使用するローカルホスト)に)正常にログインした後、それ自体を閉じてメインフレームを開くログインフレームをコーディングしています。

ログイン画面には、ウェルカム ラベル、ユーザー名ラベル、パスワード ラベル、テキスト フィールド、パスワード フィールド、およびログイン ボタンがあります。これらのコンポーネントをウィンドウの中央に配置し、中央に配置したままにして、jpanel がどれだけ大きくなってもサイズを変更しないようにします (画面上でドラッグして大きくしたり小さくしたりします)。

私の質問は、パネルのサイズが変更された場合に、それらを中央に保ち、パネルのサイズに合わせて配置するにはどうすればよいですか?? パネルのサイズが 100*100 で、ボタンが 50/50 で、パネルが 200/200 に変更されるとしますが、ボタンは 50/50 のままで、水平または垂直にサイズ変更可能に設定すると大きくなりますが、私は同じサイズのままにしたい場合は、その位置を 100/100 に合わせます。

フレームの画像を投稿できません。これには、アカウントを作成したばかりではないという評判が必要なようです。私が何をしようとしているのか、そして私が今持っているものを想像していただければ幸いです。

GroupLayout を使用した LoginFrame の私のコードは次のとおりです (関連性がないため、actionlistener を省略しました)。

public LoginFrame() {
     setTitle("LoginFrame");
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setBounds(100, 100, 363, 270);
     contentPane = new JPanel();
     contentPane.setBackground(Color.ORANGE);
     contentPane.setBorder(new EmptyBorder(0, 0, 0, 0));
     setContentPane(contentPane);

     JLabel lblWelcome = new JLabel("Welcome");

     JLabel lblNewLabel = new JLabel("Username: ");

     textField = new JTextField();
     textField.setColumns(10);

     JLabel lblNewLabel_1 = new JLabel("Password: ");

     passwordField = new JPasswordField();

     JButton btnLogin = new JButton("Login");

        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_contentPane.createSequentialGroup()
                .addGap(107)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
                    .addComponent(lblNewLabel)
                    .addComponent(lblNewLabel_1))
                .addPreferredGap(ComponentPlacement.RELATED)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
                    .addComponent(passwordField, GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE)
                    .addComponent(textField, GroupLayout.DEFAULT_SIZE, 104, Short.MAX_VALUE))
                .addGap(75))
            .addGroup(gl_contentPane.createSequentialGroup()
                .addGap(145)
                .addComponent(btnLogin)
                .addContainerGap(145, Short.MAX_VALUE))
            .addGroup(gl_contentPane.createSequentialGroup()
                .addGap(149)
                .addComponent(lblWelcome)
                .addContainerGap(155, Short.MAX_VALUE))
    );
    gl_contentPane.setVerticalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_contentPane.createSequentialGroup()
                .addGap(56)
                .addComponent(lblWelcome)
                .addGap(18)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblNewLabel))
                .addPreferredGap(ComponentPlacement.RELATED)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(passwordField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblNewLabel_1))
                .addPreferredGap(ComponentPlacement.UNRELATED)
                .addComponent(btnLogin)
                .addContainerGap(64, Short.MAX_VALUE))
    );
    contentPane.setLayout(gl_contentPane);
 }

これについて役立つ回答が得られることを願っています。具体的に説明しようとしましたが、何か不足している場合は教えてください。ありがとう

4

1 に答える 1

0

そのためには、の代わりにGridBagLayout(チュートリアルGroupLayout) を使用することをお勧めします。これは、より単純で柔軟性があるためです。それはGridBagConstraintsパラメータについて読んでください)で動作します。

次のコードは、 の助けを借りて必要なことを行いますGridBagLayout

public class LoginFrame extends JFrame {

private JPanel contentPane;
private JTextField textField;
private JPasswordField passwordField;

public LoginFrame() {
    setTitle("LoginFrame");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 363, 270);
    contentPane = new JPanel();
    contentPane.setBackground(Color.ORANGE);
    contentPane.setBorder(new EmptyBorder(0, 0, 0, 0));
    setContentPane(contentPane);

    JLabel lblWelcome = new JLabel("Welcome");

    JLabel lblNewLabel = new JLabel("Username: ");

    textField = new JTextField();
    textField.setColumns(10);

    JLabel lblNewLabel_1 = new JLabel("Password: ");

    passwordField = new JPasswordField();

    JButton btnLogin = new JButton("Login");

    contentPane.setLayout(new GridBagLayout());

    GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(5, 5, 5, 5);

    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 2;
    c.anchor = GridBagConstraints.CENTER;
    contentPane.add(lblWelcome, c);

    c.gridwidth = 1;
    c.gridy = 1;
    contentPane.add(lblNewLabel, c);

    c.gridx = 1;
    contentPane.add(textField, c);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridy = 2;
    contentPane.add(passwordField, c);

    c.fill = GridBagConstraints.NONE;
    c.gridx = 0;
    contentPane.add(lblNewLabel_1, c);

    c.gridy = 3;
    c.gridwidth = 2;
    contentPane.add(btnLogin, c);
}

public static void main(String... s) {
    LoginFrame loginFrame = new LoginFrame();
    loginFrame.setVisible(true);
}
}
于 2013-11-11T07:07:52.503 に答える