1

GridBagConstraints を使用して動作する Java コードを次に示します。

public AuctionClient() {
    JFrame guiFrame = new JFrame();
    JPanel guiPanel = new JPanel(new GridBagLayout());
    JLabel userNameLabel = new JLabel("UserName:");
    JTextField userNameTextField = new JTextField(30);
    JButton loginButton = new JButton("Login");
    JButton registerButton = new JButton("Register");                

    JLabel passwordLabel = new JLabel("Password:");
    JTextField passwordTextField = new JPasswordField(30);

    guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    guiFrame.setTitle("Auction Client");
    guiFrame.setSize(500, 250);

    guiFrame.setLocationRelativeTo(null);
    GridBagConstraints labelGBC = new GridBagConstraints();
    labelGBC.insets = new Insets(3, 3, 3, 3);
    GridBagConstraints fieldGBC = new GridBagConstraints();
    fieldGBC.insets = new Insets(3, 3, 3, 3);
    fieldGBC.gridwidth = GridBagConstraints.REMAINDER;
    guiPanel.add(userNameLabel, labelGBC);
    guiPanel.add(userNameTextField, fieldGBC);

    guiPanel.add(passwordLabel, labelGBC);
    guiPanel.add(passwordTextField, fieldGBC);    

    GridBagConstraints loginButtonGBC = new GridBagConstraints();
    loginButtonGBC.insets = new Insets(3, 3, 3, 3);        
    GridBagConstraints registerButtonGBC = new GridBagConstraints();
    registerButtonGBC.insets = new Insets(3, 3, 3, 3);        
    registerButtonGBC.gridwidth = GridBagConstraints.REMAINDER;
    guiPanel.add(loginButton, loginButtonGBC);                        
    guiPanel.add(registerButton, registerButtonGBC);                                

    guiFrame.add(guiPanel, BorderLayout.NORTH);
    guiFrame.setVisible(true);
}

パネルにコントロールを配置することに関連して GridBagConstraints がどのように機能するかについて、オンラインでいくつかの説明を調べました。私はそれがどのように機能するのか正確に理解できなかったので、このフォーラムで質問しています。

実行時の上記のコードのスクリーンショットを次に示します。

ここに画像の説明を入力

ログイン ボタンと登録ボタンをパネルの中央に並べて配置する方法を教えてください。

編集

ここに私の現在の作業コードがあります:

    public AuctionClientLogon() {
    JFrame guiFrame = new JFrame();
    JPanel guiFieldsPanel = new JPanel(new GridBagLayout());
    JPanel guiButtonsPanel = new JPanel(new GridBagLayout());        
    JLabel userNameLabel = new JLabel("UserName:");
    JTextField userNameTextField = new JTextField(30);
    JButton loginButton = new JButton("Login");
    JButton registerButton = new JButton("Register");                

    JLabel passwordLabel = new JLabel("Password:");
    JTextField passwordTextField = new JPasswordField(30);

    guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    guiFrame.setTitle("Auction Client");
    guiFrame.setSize(500, 250);

    guiFrame.setLocationRelativeTo(null);

    GridBagConstraints gbc = new GridBagConstraints();        
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.CENTER;        

    guiFieldsPanel.add(userNameLabel, gbc);
    gbc.gridx++;
    guiFieldsPanel.add(userNameTextField, gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;        
    guiFieldsPanel.add(passwordLabel, gbc);
    gbc.gridx++;        
    guiFieldsPanel.add(passwordTextField, gbc);    

    gbc.anchor = GridBagConstraints.CENTER;                
    gbc.gridx = 0;
    gbc.gridy = 1;
    guiButtonsPanel.add(loginButton, gbc);     
    gbc.gridx++;                
    guiButtonsPanel.add(registerButton, gbc);                                

    guiFrame.add(guiFieldsPanel, BorderLayout.NORTH);
    guiFrame.add(guiButtonsPanel, BorderLayout.CENTER);        
    guiFrame.setVisible(true);
}

ここに画像があります:

http://canning.co.nz/Java/Positioning_Image2.png

ラベルとテキストフィールドをボタンと同様にセンターに配置できますが、互いの上に配置することはできませんか? 可能であればすべてを中央に配置したいのですが、ボタンはラベルやテキスト フィールドよりも少し低くします。これは可能ですか?

4

2 に答える 2

1

FlowLayout を使用して、この種のボタンの行を保持します。その後、インラインで必要な場所にボタンの位置を簡単に配置できます。フロー レイアウトの使用方法をご覧ください

于 2013-05-07T03:57:33.320 に答える