import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
public class HumanResult extends JFrame {
private JLabel lblId;
private JLabel lblName;
private JLabel lblPassword;
private JLabel lblReInfo;
private JLabel lblGender;
private JLabel lblSelf;
private JTextField tfId;
private JTextField tfName;
private JPasswordField tfPassword;
private JTextField tfReInfo;
private JTextArea tfSelf;
private JButton btnDup;
private JButton btnJoin;
private JButton btnCancel;
private JRadioButton radiMan;
private JRadioButton radiWoman;
private Dimension sizeOfLabel = new Dimension(130, 20);
private int widthOfInput = 10;
public HumanResult() {
init();
setDisplay();
showFrame();
}
private JLabel getLable(String text) {
JLabel lbl = new JLabel(text, JLabel.LEFT);
lbl.setPreferredSize(sizeOfLabel);
return lbl;
}
private void init() {
lblId = getLable("아이디");
lblName = getLable("이름");
lblPassword = getLable("비밀번호");
lblReInfo = getLable("재입력");
lblGender = new JLabel("성별", JLabel.LEFT);
lblSelf = getLable("자기소개");
tfId = new JTextField(widthOfInput);
tfName = new JTextField(widthOfInput);
tfPassword = new JPasswordField(widthOfInput);
tfReInfo = new JTextField(widthOfInput);
tfSelf = new JTextArea(5, 30);
radiMan = new JRadioButton("남자");
radiWoman = new JRadioButton("여자", true);
btnDup = new JButton("중복검사");
btnJoin = new JButton("가입");
btnCancel = new JButton("취소");
}
private void setDisplay() {
JPanel id = new JPanel(new FlowLayout(FlowLayout.LEFT));
id.add(lblId);
id.add(tfId);
id.add(btnDup);
JPanel name = new JPanel(new FlowLayout(FlowLayout.LEFT));
name.add(lblName);
name.add(tfName);
JPanel password = new JPanel(new FlowLayout(FlowLayout.LEFT));
password.add(lblPassword);
password.add(tfPassword);
JPanel reInfo = new JPanel(new FlowLayout(FlowLayout.LEFT));
reInfo.add(lblReInfo);
reInfo.add(tfReInfo);
JPanel gender = new JPanel(new FlowLayout(FlowLayout.LEFT));
gender.add(lblGender);
lblGender.setPreferredSize(new Dimension(115, 20));
gender.add(radiMan);
gender.add(radiWoman);
JPanel self = new JPanel(new FlowLayout(FlowLayout.LEFT));
self.add(lblSelf);
JPanel pnl1 = new JPanel(new GridLayout(0, 1));
pnl1.add(id);
pnl1.add(name);
pnl1.add(password);
pnl1.add(reInfo);
pnl1.add(gender);
pnl1.add(self);
JPanel pnlNorth = new JPanel();
pnlNorth.add(pnl1);
JPanel area = new JPanel();
JScrollPane scroll = new JScrollPane(tfSelf);
area.add(scroll);
JPanel button = new JPanel();
button.add(btnJoin);
button.add(btnCancel);
button.setBorder(new EmptyBorder(10, 0, 10, 0));
add(pnlNorth, BorderLayout.NORTH);
add(area, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
}
private void showFrame() {
setTitle("회원가입");
pack();
setLocation(100, 0);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new HumanResult();
}
}
✏️ 코드 리팩토링 후
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.text.JTextComponent;
import java.awt.*;
public class JoinForm extends JFrame {
public static final int INPUT_SIZE = 10;
public static final int LABEL_WIDTH = 50;
public JoinForm() {
init();
setDisplay();
showFrame();
}
private JButton btnCheck;
private JRadioButton rbtnMale;
private JRadioButton rbtnFemale;
private JTextArea texIntroduce;
private JButton btnJoin;
private JButton btnCancle;
private Dimension sizeOfLabel = new Dimension(100, 15);
public void init() {
btnCheck = new JButton("중복검사");
rbtnMale = new JRadioButton("남자");
rbtnFemale = new JRadioButton("여자", true);
ButtonGroup group = new ButtonGroup();
group.add(rbtnMale);
group.add(rbtnFemale);
texIntroduce = new JTextArea(4, 30);
btnJoin = new JButton("가입");
btnCancle = new JButton("취소");
}
private JPanel getPanel(String text) {
return getPanel(text, false);
}
private JPanel getPanel(String text, boolean isPassword) {
JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lbl = new JLabel(text, JLabel.LEFT);
JTextComponent input;
if(isPassword) {
input = new JPasswordField(INPUT_SIZE);
} else {
input = new JTextField(INPUT_SIZE);
}
lbl.setPreferredSize(sizeOfLabel);
pnl.add(lbl);
pnl.add(input);
return pnl;
}
private void setDisplay() {
JPanel pnlMain = new JPanel(new BorderLayout());
JPanel pnlNorth = new JPanel(new GridLayout(0, 1));
JPanel pnlId = getPanel("아이디");
pnlId.add(btnCheck);
JPanel pnlGender = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lblGender = new JLabel("성별", JLabel.LEFT);
lblGender.setPreferredSize(sizeOfLabel);
pnlGender.add(lblGender);
pnlGender.add(rbtnMale);
pnlGender.add(rbtnFemale);
JPanel pnlIntroduce = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lblIntroduce = new JLabel("자기소개", JLabel.LEFT);
pnlIntroduce.add(lblIntroduce);
pnlNorth.add(pnlId);
pnlNorth.add(getPanel("이름"));
pnlNorth.add(getPanel("비밀번호", true));
pnlNorth.add(getPanel("재입력", true));
pnlNorth.add(pnlGender);
pnlNorth.add(pnlIntroduce);
JPanel pnlCenter = new JPanel();
pnlCenter.add(new JScrollPane(texIntroduce));
JPanel pnlSouth = new JPanel();
pnlSouth.add(btnJoin);
pnlSouth.add(btnCancle);
pnlMain.add(pnlNorth, BorderLayout.NORTH);
pnlMain.add(pnlCenter, BorderLayout.CENTER);
pnlMain.add(pnlSouth, BorderLayout.SOUTH);
pnlMain.setBorder(new EmptyBorder(10, 10, 10, 10));
add(pnlMain, BorderLayout.CENTER);
}
private void showFrame() {
setTitle("회원가입");
pack();
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new JoinForm();
}
}