JAVA SWING 회원가입 예제
JAVA SWING을 이용해서 회원가입 예제를 간단히 만들어 보았습니다. 프로그램 흐름은 메인 화면에서 버튼을 눌렀을 때 회원가입 화면이 나오게 되며 회원가입 다이얼로그 화면에서 회원 정보를 입력하고 회원가입 버튼을 눌렀을 다이얼로그 창에 입력한 정보를 메인 화면에 값을 가져오는 것까지 작성하였습니다.
프로그램 흐름은 간략히 위와 같으며 dialog, main 패키지를 각각 만들어서 main 패키지에는 TestMain.java 파일을 만들었으며 dialog 패키지에는 SignUpDialog.java 파일을 만들었습니다.
회원가입 다이얼로그 창 텍스트 필드에 기본 아이디 값을 보여주고 포커스 이벤트가 발생 되었을 때 해당 필드에 값을 지워 주었습니다. 회원가입 텍스트 필드에 모든 값이 입력되었는지 확인하는 메소드도 따로 작성하였습니다.
포커스 이벤트 모음 메소드 - FocusEvent()
텍스트 필드에 값을 모두 입력 하였는지 체크하는 메소드 - checkValue()
소스도 직접 복사해서 붙여넣을 수 있도록 작성하였으며 파일 자체도 다운로드 받을 수 있도록 자바 파일도 업로드 하였습니다.
Exam 프로젝트에 main 패키지
TestMain.java
package main;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import dialog.SignUpDialog;
public class TestMain extends JFrame{
private JPanel mainPanel = new JPanel(new GridLayout(17, 0));
private JLabel idlabel = new JLabel("다이얼로그에서 받아온 아이디 값");
private JTextField idText = new JTextField();
private JLabel pwlabel = new JLabel("다이얼로그에서 받아온 비밀번호 값");
private JTextField pwText = new JTextField();
private JLabel pwchecklabel = new JLabel("다이얼로그에서 받아온 비밀번호 확인 값");
private JTextField pwCheckText = new JTextField();
private JLabel namelabel = new JLabel("다이얼로그에서 받아온 이름 값");
private JTextField nameText = new JTextField();
private JLabel birthYearlabel = new JLabel("다이얼로그에서 받아온 생일 연도 값");
private JTextField birthYearText = new JTextField();
private JLabel birthMonthlabel = new JLabel("다이얼로그에서 받아온 생일 월 값");
private JTextField birthMonthText = new JTextField();
private JLabel birthDaylabel = new JLabel("다이얼로그에서 받아온 생일 일자 값");
private JTextField birthDayText = new JTextField();
private JLabel phoneNumberlabel = new JLabel("다이얼로그에서 받아온 핸드폰 번호 값");
private JTextField phoneNumberText = new JTextField();
private JButton signUpbtn = new JButton("다이얼로그 창에서 회원 가입 정보 입력 하기 위한 버튼!");
private TestMain owner = this;
public TestMain() {
super("메인창");
this.mainPanel.add(idlabel);
this.mainPanel.add(idText);
this.mainPanel.add(pwlabel);
this.mainPanel.add(pwText);
this.mainPanel.add(pwchecklabel);
this.mainPanel.add(pwCheckText);
this.mainPanel.add(namelabel);
this.mainPanel.add(nameText);
this.mainPanel.add(birthYearlabel);
this.mainPanel.add(birthYearText);
this.mainPanel.add(birthMonthlabel);
this.mainPanel.add(birthMonthText);
this.mainPanel.add(birthDaylabel);
this.mainPanel.add(birthDayText);
this.mainPanel.add(phoneNumberlabel);
this.mainPanel.add(phoneNumberText);
this.mainPanel.add(signUpbtn);
this.setContentPane(mainPanel);
this.setSize(500,500);
this.setVisible(true);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//회원가입 버튼을 눌렀을때 회원가입 다이얼로그 창 생성
signUpbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SignUpDialog signup = new SignUpDialog(owner);
signup.setVisible(true);
//메인 창에서 회원가입 입력이 모두 완료 되었는지 체크하는 것은 membershipProgress로 판단
if(signup.memberCheck()) {
idText.setText(signup.getIdText());
pwText.setText(signup.getPwText());
pwCheckText.setText(signup.getPwCheckText());
nameText.setText(signup.getNameText());
birthYearText.setText(signup.getBirthYearText());
birthMonthText.setText(signup.getBirthMonthContent());
birthDayText.setText(signup.getBirthDayText());
phoneNumberText.setText(signup.getPhoneNumberText());
}
}
});
}
public static void main(String[] args) {
new TestMain();
}
}
회원가입 다이얼로그 자바 파일도 업로드 하였으며 소스도 복사하여 사용하실 수 있도록 작성하였습니다.
Exam 프로젝트에 dialog 패키지에 SignUpDialog.java
package dialog;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SignUpDialog extends JDialog{
private JPanel signUpPanel = new JPanel(new GridLayout(11, 0));
private JTextField idText = new JTextField("아이디");
private JPasswordField pwText = new JPasswordField();
private JPasswordField pwCheckText = new JPasswordField();
private JTextField nameText = new JTextField("이름");
private JTextField birthYearText = new JTextField("생일 년도");
private String[] birthMonthContent = {"생일 월","1","2","3","4","5","6","7","8","9","10","11","12"};
private JComboBox<String> birthMonthList = new JComboBox<>(birthMonthContent);
private JTextField birthDayText = new JTextField("생일 일자");
private JTextField phoneNumberText = new JTextField("핸드폰 번호");
private JButton signUpbtn = new JButton("회원가입");
private JLabel pwlabel = new JLabel("비밀번호");
private JLabel pwChecklabel = new JLabel("비밀번호 확인");
private boolean membershipProgress = false;
public SignUpDialog(Frame frame) {
super(frame, true);
this.setTitle("회원가입");
this.signUpPanel.add(idText);
this.signUpPanel.add(pwlabel);
this.signUpPanel.add(pwText);
this.signUpPanel.add(pwChecklabel);
this.signUpPanel.add(pwCheckText);
this.signUpPanel.add(nameText);
this.signUpPanel.add(birthYearText);
this.signUpPanel.add(birthMonthList);
this.signUpPanel.add(birthDayText);
this.signUpPanel.add(phoneNumberText);
this.signUpPanel.add(signUpbtn);
this.setContentPane(signUpPanel);
this.setSize(300,500);
this.setLocationRelativeTo(null);
FocusEvent();
checkValue();
}
//텍스트 필드에 있는 값을 체크하고 지우기 위한 메소드
private void FocusEvent() {
idText.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
if(idText.getText().trim().length()==0) {
idText.setText("아이디");
}
}
public void focusGained(FocusEvent e) {
if(idText.getText().trim().equals("아이디")) {
idText.setText("");
}
}
});
nameText.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
if(nameText.getText().trim().length()==0) {
nameText.setText("이름");
}
}
public void focusGained(FocusEvent e) {
if(nameText.getText().trim().equals("이름")) {
nameText.setText("");
}
}
});
birthYearText.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
if(birthYearText.getText().trim().length()==0) {
birthYearText.setText("생일 년도");
}
}
public void focusGained(FocusEvent e) {
if(birthYearText.getText().trim().equals("생일 년도")) {
birthYearText.setText("");
}
}
});
birthDayText.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
if(birthDayText.getText().trim().length()==0) {
birthDayText.setText("생일 일자");
}
}
public void focusGained(FocusEvent e) {
if(birthDayText.getText().trim().equals("생일 일자")) {
birthDayText.setText("");
}
}
});
phoneNumberText.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
if(phoneNumberText.getText().trim().length()==0) {
phoneNumberText.setText("핸드폰 번호");
}
}
public void focusGained(FocusEvent e) {
if(phoneNumberText.getText().trim().equals("핸드폰 번호")) {
phoneNumberText.setText("");
}
}
});
}
//회원 가입할때 모든 값이 입력되었는지 체크하기 위한 메소드
private void checkValue(){
signUpbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(idText.getText().trim().length()==0 || idText.getText().trim().equals("아이디")) {
JOptionPane.showMessageDialog(null, "아이디를 입력해 주세요.", "아이디 입력", JOptionPane.WARNING_MESSAGE);
idText.grabFocus();
return;
}
if(pwText.getText().trim().length()==0) {
JOptionPane.showMessageDialog(null, "비밀번호를 입력해 주세요.", "비밀번호 입력", JOptionPane.WARNING_MESSAGE);
pwText.grabFocus();
return;
}
if(pwCheckText.getText().trim().length()==0) {
JOptionPane.showMessageDialog(null, "비밀번호 확인을 입력해 주세요.", "비밀번호 확인 입력", JOptionPane.WARNING_MESSAGE);
pwCheckText.grabFocus();
return;
}
if(!(pwText.getText().trim().equals(pwCheckText.getText().trim()))) {
JOptionPane.showMessageDialog(null, "비밀번호가 같지 않습니다.!!", "비밀번호 확인", JOptionPane.WARNING_MESSAGE);
return;
}
if(nameText.getText().trim().length()==0 || nameText.getText().trim().equals("이름")) {
JOptionPane.showMessageDialog(null, "이름을 입력해 주세요.", "이름 입력", JOptionPane.WARNING_MESSAGE);
nameText.grabFocus();
return;
}
if(birthYearText.getText().trim().length()==0 || birthYearText.getText().trim().equals("생일 년도")) {
JOptionPane.showMessageDialog(null, "생년월일의 생일 년도를 입력해 주세요.", "생일 년도 입력", JOptionPane.WARNING_MESSAGE);
birthYearText.grabFocus();
return;
}
if(birthMonthList.getSelectedIndex()==0) {
JOptionPane.showMessageDialog(null, "생년월일의 월을 선택해 주세요.", "월 입력", JOptionPane.WARNING_MESSAGE);
birthMonthList.grabFocus();
return;
}
if(birthDayText.getText().trim().length()==0 || birthDayText.getText().trim().equals("생일 일자")) {
JOptionPane.showMessageDialog(null, "생일 일자를 입력해 주세요.", "생일 일자 입력", JOptionPane.WARNING_MESSAGE);
birthDayText.grabFocus();
return;
}
if(phoneNumberText.getText().trim().length()==0 || phoneNumberText.getText().trim().equals("핸드폰 번호")) {
JOptionPane.showMessageDialog(null, "핸드폰 번호를 입력해 주세요.", "핸드폰 번호 입력", JOptionPane.WARNING_MESSAGE);
phoneNumberText.grabFocus();
return;
}
//여기까지 왔다면 모든 값을 입력하고 선택하는 것이 완료되었으니 회원가입 과정이 완료.
membershipProgress = true;
setVisible(false);
}
});
}
//메인 클래스에서 다이얼로그 회원가입 창 데이터를 가져오기 위한 get 메소드 선언
public String getIdText() {
return this.idText.getText().trim();
}
public String getPwText() {
return this.pwText.getText().trim();
}
public String getPwCheckText() {
return this.pwCheckText.getText().trim();
}
public String getNameText() {
return this.nameText.getText().trim();
}
public String getBirthYearText() {
return this.birthYearText.getText().trim();
}
public String getBirthMonthContent() {
return this.birthMonthList.getSelectedItem().toString();
}
public String getBirthDayText() {
return this.birthDayText.getText();
}
public String getPhoneNumberText() {
return this.phoneNumberText.getText().trim();
}
public boolean memberCheck() {
return membershipProgress;
}
}
아래 이미지와 같이 메인 창 화면에서 버튼을 누르면 회원가입 다이얼로그 창이 나오게 됩니다 값들은 비어 있는 상태입니다.
회원가입 창 다이얼로그 화면인데 각각의 텍스트 필드에 있는 값을 미리 넣어 놓고 해당 텍스트 필드에 값을 입력하려고 할 때 기존에 값을 삭제하기 위해 텍스트 필드에 포커스 이벤트로 기존에 텍스트 필드에 값을 지우고 값을 입력하지 않았을 때 다른 곳을 클릭 했을 때는 기본값이 다시 나오도록 작성하였습니다.
회원가입 다이얼로그 창에서 모든 값을 입력하고 회원가입 버튼을 눌러 줍니다.
그럼 회원가입 다이얼로그 화면에서 회원가입 버튼을 눌렀을 때 메인 프레임 화면에서 회원가입 창에서 입력한 값이 표시됩니다.
JAVA SWING을 이용해 메인 프레임 화면에서 JDialog 화면에 입력된 값을 가져오는 부분과 모든 예외 처리를 상세하게 모두 처리하지는 않았지만, 간단히 필요한 예외 처리 부분까지 소스를 작성하였습니다.
JAVA SWING을 이용해서 회원가입 예제가 필요한 분들은 참고하시면 좋을 것 같습니다.