2016-06-13 5 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

당신은 패널 내부에 암호와 사용자 이름을 배치 할 수 있습니다 및 다음 SOUTH 그래서 당신은 사용자 이름 NORTH를 배치 할 수 있습니다 일을 BorderLayout.By에 패널과 암호의 레이아웃을 설정할 수 있습니다, 이 2 개를 JFrame에 추가합니다. – theVoid

+0

더 나은 도움을 받으려면 [MCVE] 또는 [짧은, 자체 포함, 올바른 예] (http://www.sscce.org/)를 게시하십시오. –

+3

BTW - 내가 접근 할 방법 : 1) 패스워드로 'JPasswordField'를 사용하십시오. 2) 단일 패널에서 GridBagLayout의 두 레이블과 텍스트 및 암호 필드를 모두 표시하십시오. 3) 사용자 명/패스워드 필드 아래에 필요한 버튼을 제공 할 수있는 기능을 이미 갖춘 JOptionPane에 패널을 표시하십시오. –

답변

0

당신은 setBounds (X, Y, 길이, heigth)를 사용하여 시도 할 수 있습니다 당신이

0

GridLayoutFlowLayout도 사용하지 마십시오 setLayout의 (널)에 있습니다. 그들은 아무런 도움이되지 않습니다. 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