2016-06-13 46 views
-1

今、私は 'ログイン' JFrameの設定をしています。ユーザー名とパスワードに2つのラベルと2つのフィールドがあります。これらは、中心とように表示されています。Java JLabelとJTextFieldの位置付け

username: |text field| 
password: |text field| 

JPanel loginLabel = new JPanel(new GridLayout(0, 1, 0, 10)); 
     loginLabel.add(usernameLabel); 
     loginLabel.add(passwordLabel); 
     loginLabel.setBackground(new Color(82,80,80)); 

     JPanel loginField = new JPanel(new GridLayout(0, 1, 0, 10)); 
     loginField.add(usernameField); 
     loginField.add(passwordField); 
     loginField.setBackground(new Color(82,80,80)); 

     JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     buttonPanel.add(createButton); 
     buttonPanel.add(loginButton); 
     buttonPanel.add(quitButton); 
     buttonPanel.setBackground(new Color(82,80,80)); 

     setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); 
     setBackground(new Color(82,80,80)); 
     add(loginLabel, BorderLayout.CENTER); 
     add(loginField, BorderLayout.LINE_END); 
     add(buttonPanel, BorderLayout.SOUTH); 

私はすべてのラベルとフィールドが集中している場所、それをしようとしていますが、彼らは代わりに次のように表示されます。

Username 
|Text Field| 

    Password 
|Text Field| 

誰もがこれを支援することはできますか?

+0

、あなたがパネル内のパスワードとユーザー名を置くことができ、その後、あなたはユーザ名南北パスワードを置くことができそうBorderLayout.Byにパネルのレイアウトを設定することができますこれらの2つをJFrameに追加します。 – theVoid

+0

すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+3

私はこれにアプローチする方法:1)パスワードに 'JPasswordField'を使用する、2)両方のラベルとテキスト&パスワードフィールドを単一のパネルの' GridBagLayout'に表示する。 3)ユーザ名/パスワードフィールドの下に必要なボタンを提供する機能を既に持っているJOptionPaneにパネルを表示します。 –

答えて

0

GridLayoutFlowLayoutどちらを使用しないでくださいsetLayoutの(ヌル)に

0

をあなたはsetBounds(X、Y、長さ、heigth)を使用しようとすることができ、あなたが持っています。彼らは何のためにも良いです。 GroupLayoutまたはMigLayoutのいずれかをお勧めします。

GroupLayoutマネージャが組み込まれたソリューションを作成しました。モダンで柔軟なレイアウトマネージャです。

package com.zetcode; 

import java.awt.Container; 
import java.awt.EventQueue; 
import javax.swing.GroupLayout; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JLabel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 

public class GroupLayoutPasswordEx extends JFrame { 

    public GroupLayoutPasswordEx() { 

     initUI(); 
    } 

    private void initUI() { 

     JLabel userLabel = new JLabel("User"); 
     JTextField userField = new JTextField(); 

     JLabel pswdLabel = new JLabel("Password"); 
     JPasswordField pswdField = new JPasswordField(); 

     createLayout(userLabel, userField, pswdLabel, pswdField); 

     setTitle("Login"); 
     setSize(300, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    private void createLayout(JComponent... arg) { 

     Container pane = getContentPane(); 
     GroupLayout gl = new GroupLayout(pane); 
     pane.setLayout(gl); 

     gl.setAutoCreateContainerGaps(true); 
     gl.setAutoCreateGaps(true); 

     gl.setHorizontalGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER) 
       .addComponent(arg[0]) 
       .addComponent(arg[1]) 
       .addComponent(arg[2]) 
       .addComponent(arg[3]) 
     ); 

     gl.setVerticalGroup(gl.createSequentialGroup() 
       .addComponent(arg[0]) 
       .addComponent(arg[1], GroupLayout.DEFAULT_SIZE, 
         GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .addComponent(arg[2]) 
       .addComponent(arg[3], GroupLayout.DEFAULT_SIZE, 
         GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
     ); 
    }  


    public static void main(String[] args) { 
     EventQueue.invokeLater(() -> { 
      GroupLayoutPasswordEx ex = new GroupLayoutPasswordEx(); 
      ex.setVisible(true); 
     }); 
    } 
} 

このマネージャーに時間を費やすことは難しくありません。ここ はスクリーンショットです:

Login