자바의 GUI 요소 중 JTable 을 사용한 예제이다.
JTable을 통해 표 형식의 데이터를 효과적으로 보여줄 수 있다.
간단한 JTable 사용예제
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class JTableExam
{
JFrame jFrame = new JFrame("JTable 예제");
String columnNames[] =
{ "상품번호", "상품이름", "상품가격", "상품설명" };
Object rowData[][] =
{
{ 1, "맛동산", 100, "오리온" },
{ 2, "아폴로", 200, "불량식품" },
{ 3, "칸쵸코", 300, "과자계의 레전드" } };
JTable jTable = new JTable(rowData, columnNames);
JScrollPane jScollPane = new JScrollPane(jTable);
public JTableExam()
{
jFrame.add(jScollPane);
jFrame.setSize(400, 300);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new JTableExam();
}
}
DefaultTableModel
디폴트 테이블 모델을 생성 후에 JTable에 넣어줄 수 있다.
JTable은 GUI 요소이고 여기에 들어갈 데이터는 앞서 2차원 배열로 표현해주었는데,
2차원 배열은 여러모로 유동적으로 다루기 어려운 부분이 많다.
이러한 불편함을 DefaultTableModel 이라는 객체를 통해 해소시켜 줄 수 있다.
간단한 DefaultTableModel 사용예제
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableExam
{
JFrame jFrame = new JFrame("JTable 예제");
String columnNames[] =
{ "상품번호", "상품이름", "상품가격", "상품설명" };
Object rowData[][] =
{
{ 1, "맛동산", 100, "오리온" },
{ 2, "아폴로", 200, "불량식품" },
{ 3, "칸쵸코", 300, "과자계의 레전드" } };
//DefaultTableModel을 선언하고 데이터 담기
DefaultTableModel defaultTableModel = new DefaultTableModel(rowData, columnNames);
//JTable에 DefaultTableModel을 담기
JTable jTable = new JTable(defaultTableModel);
//JScrollPane에 JTable을 담기
JScrollPane jScollPane = new JScrollPane(jTable);
public JTableExam()
{
jFrame.add(jScollPane);
//행 한줄 추가!
Object [] temporaryObject = { 4, "초코송이", 500, "식품계의 절대강자" };
defaultTableModel.addRow(temporaryObject);
//행과 열 갯수 구하기
System.out.println(defaultTableModel.getRowCount());
System.out.println(defaultTableModel.getColumnCount());
//컬럼(열)의 index는 0부터 시작한다!!
System.out.println(defaultTableModel.getColumnName(0));
//0행을 삭제하면 제목행을 제외하고 첫째행을 삭제한다!!
defaultTableModel.removeRow(0);
//값을 얻어올 때도 0부터 index가 시작된다는 것에 주의한다!!
System.out.println(defaultTableModel.getValueAt(2, 2));
//특정 좌표의 값을 바꾸는 것은 setValueAt()
defaultTableModel.setValueAt("5000", 2, 2);
//테이블에 Row를 미리 선택한 상태로 만들기!
jTable.setRowSelectionInterval(1, 1);
jFrame.setSize(500, 300);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new JTableExam();
}
}
DB와 연동해서 데이터 입출력을 수행하는 JTable 예제
실제 데이터베이스와 연동해서 데이터 입출력을 수행하는 예제이다.
앞서 배운 DefaultTableModel은 사실 이러한 DB연동 때에 큰 힘을 발휘한다.
DB관련 기본값을 선언한 Class
public class DatabaseConstant
{
public final static String DRIVERNAME = "oracle.jdbc.driver.OracleDriver";
public final static String URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
public final static String USER = "scott";
public final static String PASSWORD = "tiger";
}
메인 프로그램 Class
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class MenuExam
{
// *** DB 관련 변수 선언 ***
Connection connection;
PreparedStatement preparedStatement;
Statement statement;
ResultSet resultSet;
// *** 상수 선언 ***
public final int SEARCH_ID = 0;
public final int SEARCH_NAME = 1;
public final int SEARCH_ADDR = 2;
public final int SEARCH_ALL = 3;
public final int SEARCH_NONE = 4;
public final int NEW_MODE = 1;
public final int EDIT_MODE = 2;
// *** 메인 UI 관련 변수 선언 ***
// 프레임 선언
JFrame jFrame = new JFrame("DB연동");
//DefaultTableModel을 선언하고 데이터 담기
DefaultTableModel defaultTableModel = new DefaultTableModel(new String[] { "ID", "Name", "Age", "Address" }, 0)
{
@Override
public boolean isCellEditable(int row, int column)
{
return false;
}
};
//JTable에 DefaultTableModel을 담기
JTable jTable = new JTable(defaultTableModel);
// Swing에서 스크롤바를 넣기 위해 아래와 같이 사용한다.
JScrollPane jScrollPane = new JScrollPane(jTable);// 스크롤바 만들기
// 검색어를 입력할 입력창
JTextField jTextField = new JTextField(20);
// 검색 버튼
JButton jButton = new JButton("검색");
// 콤보 박스
JComboBox<String> jComboBox = new JComboBox<String>(new String[] {"ID", "Name", "Address", "전체검색"});
// 메뉴 선언
JMenuBar menuBar = new JMenuBar();
JMenu adminMenu = new JMenu("관리");
// 패널 선언
JPanel jPanel = new JPanel(new FlowLayout());
/**
* [MenuExam 클래스의 생성자]
* GUI를 생성하고 DB에 테이블 존재 여부를 확인해 없을 경우 생성한다.
* 전체 멤버 목록을 출력해주는 메소드를 호출한다.
*/
public MenuExam()
{
// *** 메인 UI 설정 ***
// 관리 메뉴 생성
adminMenu.add(new JMenuItem("가입"));
adminMenu.add(new JMenuItem("수정"));
adminMenu.add(new JMenuItem("삭제"));
adminMenu.addSeparator(); //구분선 추가
adminMenu.add(new JMenuItem("종료"));
// 메뉴를 메뉴바에 등록
menuBar.add(adminMenu);
// 메뉴바 추가
jFrame.setJMenuBar(menuBar);
// 테이블 추가
jTable.getTableHeader().setReorderingAllowed(false); //테이블 컬럼 순서 변경 금지
jFrame.add(jScrollPane);
// 하단 패널에 컴포넌트 추가
jPanel.add(jComboBox);
jPanel.add(jTextField);
jPanel.add(jButton);
// 하단 패널 추가
jFrame.add(jPanel, "South");
// 프레임 크기 및 보이기 설정
jFrame.setSize(600, 400);
jFrame.setResizable(false);
jFrame.setVisible(true);
jFrame.setLocationRelativeTo(null);
// swing에만 있는 X버튼 클릭시 종료
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// *** DB 연결 ***
try
{
// ① 로드
Class.forName(DatabaseConstant.DRIVERNAME);
// *** DB 생성 ***
// ② 연결
connection = DriverManager.getConnection(DatabaseConstant.URL, DatabaseConstant.USER, DatabaseConstant.PASSWORD);
// ② 연결 [Statement]
statement = connection.createStatement();
// ③ 실행 [CRUD]
resultSet = statement.executeQuery("SELECT COUNT(TABLE_NAME) FROM USER_TABLES WHERE TABLE_NAME='MEMBER'");
int result = 0;
if(resultSet.next())
{
result = Integer.valueOf(resultSet.getString(1));
}
// 테이블이 생성되지 않은 경우 생성!
if( result == 0 )
{
statement.executeUpdate("CREATE TABLE MEMBER ( ID VARCHAR2(30) PRIMARY KEY NOT NULL, NAME VARCHAR2(20) NOT NULL, AGE NUMBER(3) NOT NULL, ADDR VARCHAR2(100) NOT NULL )");
}
// 테이블이 존재하는 경우 데이터 가져와 출력하기
else
{
searchMember(SEARCH_NONE, null);
}
}
catch (ClassNotFoundException e)
{
System.out.println("[로드 오류]\n" + e.getStackTrace());
}
catch (SQLException e)
{
System.out.println("[연결 오류]\n" + e.getStackTrace());
}
finally
{
closeDatabase();
}
// *** 이벤트 설정 ***
//가입 메뉴
adminMenu.getItem(0).addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//다이얼로그 띄우기
MemberDialog memberDialog = new MemberDialog();
memberDialog.jDialog.setModal(true);
memberDialog.jDialog.setVisible(true);
}
});
//수정 메뉴
adminMenu.getItem(1).addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//여러 컬럼을 선택하는 경우와 선택하지 않은 경우를 고려
switch( jTable.getSelectedRowCount() )
{
case 0:
JOptionPane.showMessageDialog(jFrame, "선택된 컬럼이 없습니다.");
break;
case 1:
//DefaultTableModel에서 선택한 컬럼의 값들을 가져오기
String id = String.valueOf(defaultTableModel.getValueAt(jTable.getSelectedRow(), 0));
String name = String.valueOf(defaultTableModel.getValueAt(jTable.getSelectedRow(), 1));
int age = Integer.valueOf((String) defaultTableModel.getValueAt(jTable.getSelectedRow(), 2));
String addr = String.valueOf(defaultTableModel.getValueAt(jTable.getSelectedRow(), 3));
//다이얼로그 띄우기
MemberDialog memberDialog = new MemberDialog(id, name, age, addr);
memberDialog.jDialog.setModal(true);
memberDialog.jDialog.setVisible(true);
break;
default:
JOptionPane.showMessageDialog(jFrame, "하나의 컬럼만 선택해주세요.");
break;
}
}
});
//삭제 메뉴
adminMenu.getItem(2).addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//하나 이상의 컬럼이 선택된 경우
if( jTable.getSelectedRowCount() > 0 )
{
if( JOptionPane.showConfirmDialog(jFrame, "선택된 컬럼들을 삭제합니까?", "삭제 확인", 0) == 0 )
{
//선택된 멤버들을 삭제
for(int i : jTable.getSelectedRows())
{
deleteMember(String.valueOf(defaultTableModel.getValueAt(i, 0)));
}
//내용 업데이트
searchMember(SEARCH_NONE, null);
}
}
else
{
JOptionPane.showMessageDialog(jFrame, "선택된 컬럼이 없습니다.");
}
}
});
//종료 메뉴
adminMenu.getItem(4).addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if( JOptionPane.showConfirmDialog(MenuExam.this.jFrame, "종료합니다.", "종료 확인", 0) == 0 )
{
System.exit(0);
}
}
});
//검색 버튼
jButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(jButton.getText().equals("검색"))
{
if( jTextField.getText().trim().length() > 0 )
{
switch( jComboBox.getSelectedIndex() )
{
//아이디
case SEARCH_ID:
searchMember(SEARCH_ID, jTextField.getText().trim());
break;
//이름
case SEARCH_NAME:
searchMember(SEARCH_NAME, jTextField.getText().trim());
break;
//주소
case SEARCH_ADDR:
searchMember(SEARCH_ADDR, jTextField.getText().trim());
break;
//전체
case SEARCH_ALL:
searchMember(SEARCH_ALL, jTextField.getText().trim());
break;
}
jButton.setText("취소");
}
else
{
JOptionPane.showMessageDialog(jFrame, "검색어를 입력해주세요!");
}
}
else
{
//검색 초기화
searchMember(SEARCH_NONE, null);
}
}
});
}
/**
* [데이터베이스를 닫는 메소드]
* connection, statement, resultSet의 null 여부를 체크한뒤 담겨있을 경우 닫아준다.
* @param 없음
* @return 없음
*/
public void closeDatabase()
{
try
{
if( connection != null )
{
connection.close();
}
if( statement != null )
{
statement.close();
}
if( resultSet != null )
{
resultSet.close();
}
}
catch (SQLException e)
{
System.out.println("[닫기 오류]\n" + e.getStackTrace());
}
}
/**
* ID 중복 체크 메소드
* 파라메터로 입력받은 id값을 member 테이블의 id 필드에서 검색해서 1개라도 존재하면 true를 리턴하는 메소드
* @param id 아이디
* @return 중복되는 id가 존재할 경우 true, 없으면 false
*/
public boolean idCheck(String id)
{
int result = 0;
try
{
// ② 연결
connection = DriverManager.getConnection(DatabaseConstant.URL, DatabaseConstant.USER, DatabaseConstant.PASSWORD);
// ② 연결 [Statement]
statement = connection.createStatement();
// ③ 실행 [CRUD]
resultSet = statement.executeQuery("SELECT COUNT(id) FROM MEMBER WHERE ID='"+ id + "'");
if(resultSet.next())
{
result = Integer.valueOf(resultSet.getString(1));
}
}
catch (SQLException e)
{
System.out.println("[연결 오류]\n" + e.getStackTrace());
}
finally
{
closeDatabase();
}
return (result > 0) ? true : false;
}
/**
* [멤버 검색 및 출력 메소드]
* searchMode에 따라 모두 출력하거나, ID,이름,주소가 keyWord와 일치하는 멤버를 출력해준다.
* @param searchMode 검색 모드
* @param keyWord 검색어
* @return 없음
*/
public void searchMember(int searchMode, String keyWord)
{
try
{
// ② 연결
connection = DriverManager.getConnection(DatabaseConstant.URL, DatabaseConstant.USER, DatabaseConstant.PASSWORD);
// ② 연결 [Statement]
statement = connection.createStatement();
// ③ 실행 [CRUD]
switch( searchMode )
{
//아이디
case SEARCH_ID:
resultSet = statement.executeQuery("SELECT * FROM MEMBER WHERE ID LIKE '%" + keyWord + "%'");
break;
//이름
case SEARCH_NAME:
resultSet = statement.executeQuery("SELECT * FROM MEMBER WHERE NAME LIKE '%" + keyWord + "%'");
break;
//주소
case SEARCH_ADDR:
resultSet = statement.executeQuery("SELECT * FROM MEMBER WHERE ADDR LIKE '%" + keyWord + "%'");
break;
//이름, 주소, 아이디에서 검색
case SEARCH_ALL:
resultSet = statement.executeQuery("SELECT DISTINCT * FROM MEMBER WHERE ID LIKE '%" + keyWord + "%' OR NAME LIKE '%" + keyWord + "%' OR ADDR LIKE '%" + keyWord + "%'");
break;
//검색 안함
case SEARCH_NONE:
resultSet = statement.executeQuery("SELECT * FROM MEMBER");
//기존 검색 상황도 초기화
jTextField.setText(null);
jButton.setText("검색");
jComboBox.setSelectedIndex(0);
break;
}
// 컬럼 정보 가져오기
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
// 데이터를 담을 오브젝트 생성
Object [] tempObject = new Object[resultSetMetaData.getColumnCount()];
// DefaultTableModel 초기화
defaultTableModel.setRowCount(0);
while (resultSet.next())
{
for(int i=0; i < resultSetMetaData.getColumnCount(); i++)
{
tempObject[i] = resultSet.getString(i+1);
}
defaultTableModel.addRow(tempObject);
}
if( defaultTableModel.getRowCount() > 0 )
{
jTable.setRowSelectionInterval(0, 0); //첫째줄에 포커싱
}
}
catch (SQLException e)
{
System.out.println("[연결 오류]\n" + e.getStackTrace());
}
finally
{
closeDatabase();
}
}
/**
* [멤버 추가 메소드]
* dialogMode가 NEW_MODE인지 EDIT_MODE인지를 체크한 후 ID, 이름, 나이, 주소값을 받아와서 새로 추가하거나 저장하는 메소드
* @param dialogMode NEW_MODE인지 EDIT_MODE인지를 체크하는 변수
* @param id 아이디
* @param name 이름
* @param age 나이
* @param addr 주소
* @return 정상적으로 수정되거나 추가되면 true, 실패하면 false를 반환한다.
*/
public boolean submitMember(int dialogMode, String id, String name, int age, String addr)
{
int result = 0;
try
{
// ② 연결
connection = DriverManager.getConnection(DatabaseConstant.URL, DatabaseConstant.USER, DatabaseConstant.PASSWORD);
// ③ 실행 [CRUD]
if(dialogMode == NEW_MODE)
{
preparedStatement = connection.prepareStatement("INSERT INTO MEMBER VALUES ( ?, ?, ?, ? )");
preparedStatement.setString(1, id);
preparedStatement.setString(2, name);
preparedStatement.setInt(3, age);
preparedStatement.setString(4, addr);
}
else
{
preparedStatement = connection.prepareStatement("UPDATE MEMBER SET NAME=?, AGE=?, ADDR=? WHERE ID=?");
preparedStatement.setString(1, name);
preparedStatement.setInt(2, age);
preparedStatement.setString(3, addr);
preparedStatement.setString(4, id);
}
// ③ 실행 [CRUD]
result = preparedStatement.executeUpdate();
}
catch (SQLException e)
{
System.out.println("[연결 오류]\n" + e.getStackTrace());
}
finally
{
closeDatabase();
}
//내용 업데이트
searchMember(SEARCH_NONE, null);
return (result > 0) ? true : false;
}
// *** 멤버 삭제 메소드 ***
/**
* [멤버 삭제 메소드]
* 멤버의 ID를 String으로 받아와서 삭제한다.
* @param id 아이디
* @return 멤버 삭제가 성공하면 true, 실패하면 false
*/
public boolean deleteMember(String id)
{
int result = 0;
try
{
// ② 연결
connection = DriverManager.getConnection(DatabaseConstant.URL, DatabaseConstant.USER, DatabaseConstant.PASSWORD);
// ③ 실행 [CRUD]
preparedStatement = connection.prepareStatement("DELETE FROM MEMBER WHERE ID=?");
preparedStatement.setString(1, id);
result = preparedStatement.executeUpdate();
}
catch (SQLException e)
{
System.out.println("[연결 오류]\n" + e.getStackTrace());
}
finally
{
closeDatabase();
}
return (result > 0) ? true : false;
}
public static void main(String[] args)
{
//실행
new MenuExam();
}
// *** 다이얼로그 클래스 ***
/**
* 가입/수정 관련 이벤트를 포함해 JDialog를 생성하는 클래스
* @author 안재하
*/
class MemberDialog
{
// *** 다이얼로그 UI 관련 변수 선언 ***
JDialog jDialog = new JDialog(jFrame, "멤버 속성 입력");
JButton idCheckButton = new JButton("ID 체크 확인");
JButton submitButton = new JButton("가입");
JButton cancelButton = new JButton("취소");
JPanel fieldNamePanel = new JPanel(new GridLayout(4,1));
JPanel fieldValuePanel = new JPanel(new GridLayout(4,1));
JPanel buttonPanel = new JPanel(new FlowLayout());
JPanel idPanel = new JPanel(new BorderLayout());
JLabel idLabel = new JLabel("ID");
JLabel nameLabel = new JLabel("이름");
JLabel ageLabel = new JLabel("나이");
JLabel addrLabel = new JLabel("주소");
JTextField idField = new JTextField(10);
JTextField nameField = new JTextField(10);
JTextField ageField = new JTextField(10);
JTextField addrField = new JTextField(10);
// *** 다이얼로그 관련 변수 선언 ***
int dialogMode = NEW_MODE;
/**
* [MemberDialog 생성자]
* 파라메터가 아무것도 없는 경우, 가입 모드로 인식한다.
* 다이얼로그 관련 모든 설정을 다 하지만, modal 설정을 위해
* modal 설정과 visible은 호출한 곳에서 처리한다.
*/
MemberDialog()
{
// *** 다이얼로그 UI 설정 ***
//패널에 콤포넌트 추가
fieldNamePanel.add(idLabel);
fieldNamePanel.add(nameLabel);
fieldNamePanel.add(ageLabel);
fieldNamePanel.add(addrLabel);
idPanel.add(idField);
idPanel.add(idCheckButton, "East");
fieldValuePanel.add(idPanel);
fieldValuePanel.add(nameField);
fieldValuePanel.add(ageField);
fieldValuePanel.add(addrField);
buttonPanel.add(submitButton);
buttonPanel.add(cancelButton);
// 다이얼로그에 패널 추가
jDialog.add(fieldNamePanel, "West");
jDialog.add(fieldValuePanel, "Center");
jDialog.add(buttonPanel, "South");
// 다이얼로그의 크기와 보기 설정
jDialog.setSize(350, 250);
jDialog.setLocationRelativeTo(jFrame);
jDialog.setResizable(false);
jDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// *** 이벤트 설정 ***
//ID 체크 메뉴
idCheckButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//ID를 입력한 경우에만
if(idField.getText().length() > 0)
{
//아이디가 존재하는 경우
if(MenuExam.this.idCheck(idField.getText()))
{
JOptionPane.showMessageDialog(jDialog, "사용할 수 없는 아이디입니다!");
idField.setText(null);
idField.requestFocus();
}
//없는 아이디인 경우
else
{
JOptionPane.showMessageDialog(jDialog, "사용 가능한 아이디입니다!");
}
}
else
{
JOptionPane.showMessageDialog(jDialog, "아이디를 입력해주세요!");
idField.requestFocus();
}
}
});
//가입(수정) 메뉴
submitButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//ID를 입력한 경우에만
if(idField.getText().trim().length() == 0)
{
JOptionPane.showMessageDialog(jDialog, "아이디를 입력해주세요!");
idField.requestFocus();
}
else if(idField.getText().trim().length() > 30)
{
JOptionPane.showMessageDialog(jDialog, "아이디는 30자 이내로 입력해야 합니다!");
idField.requestFocus();
}
else if(dialogMode == NEW_MODE && MenuExam.this.idCheck(idField.getText()))
{
JOptionPane.showMessageDialog(jDialog, "사용할 수 없는 아이디입니다!");
idField.setText(null);
idField.requestFocus();
}
else if(nameField.getText().trim().length() == 0 )
{
JOptionPane.showMessageDialog(jDialog, "이름을 입력해주세요!");
nameField.requestFocus();
}
else if(nameField.getText().trim().length() > 20)
{
JOptionPane.showMessageDialog(jDialog, "이름 20자 이내로 입력해야 합니다!");
nameField.requestFocus();
}
else if(ageField.getText().trim().length() == 0 )
{
JOptionPane.showMessageDialog(jDialog, "나이를 입력해주세요!");
ageField.requestFocus();
}
else if(!isNumber(ageField.getText().trim()))
{
JOptionPane.showMessageDialog(jDialog, "나이를 숫자로 입력해주세요!");
ageField.setText(null);
ageField.requestFocus();
}
else if(Integer.valueOf(ageField.getText()) < 0 || Integer.valueOf(ageField.getText()) > 999)
{
JOptionPane.showMessageDialog(jDialog, "나이는 0부터 999사이의 값만 입력가능합니다.!");
ageField.requestFocus();
}
else if(addrField.getText().trim().length() == 0 )
{
JOptionPane.showMessageDialog(jDialog, "주소를 입력해주세요!");
addrField.requestFocus();
}
else if(addrField.getText().trim().length() > 100 )
{
JOptionPane.showMessageDialog(jDialog, "주소는 100자 이내로 입력해야 합니다!");
addrField.requestFocus();
}
//오류가 없는 경우
else
{
if(MenuExam.this.submitMember(dialogMode, idField.getText().trim(), nameField.getText().trim(), Integer.valueOf(ageField.getText()), addrField.getText().trim()))
{
if(dialogMode == NEW_MODE)
{
JOptionPane.showMessageDialog(jDialog, "가입을 축하드립니다!");
}
else
{
JOptionPane.showMessageDialog(jDialog, "정상적으로 수정되었습니다!");
}
jDialog.dispose(); //닫기
}
//없는 아이디인 경우
else
{
JOptionPane.showMessageDialog(jDialog, "입력 과정에서 오류가 발생했습니다!");
}
}
}
});
//취소 메뉴
cancelButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
jDialog.dispose(); //닫기
}
});
}
/**
* [MemberDialog 생성자]
* 파라메터가 있는 경우, 수정 모드로 인식한다.
* 파라메터가 없는 생성자를 호출해 해당 내용을 모두 실행하고
* 수정모드이므로 파라메터로 받아온 기존값을 필드에 출력해준다.
* 다이얼로그 관련 모든 설정을 다 하지만, modal 설정을 위해
* modal 설정과 visible은 호출한 곳에서 처리한다.
* @param id 아이디
* @param name 이름
* @param age 나이
* @param addr 주소
*/
MemberDialog(String id, String name, int age, String addr)
{
this();
//모드 설정
dialogMode = EDIT_MODE;
//기존 값 설정
idField.setText(id);
nameField.setText(name);
ageField.setText(String.valueOf(age));
addrField.setText(addr);
//ID 비활성화
idField.setEnabled(false);
idCheckButton.setEnabled(false);
//버튼 수정
submitButton.setText("수정");
}
/**
* [숫자인지 판별해주는 메소드]
* String값을 받아 Integer형으로 변환 테스트하여 오류 날 경우 false, 숫자일 경우 true를 리턴한다.
* @param s 임의의 문자열
* @return 숫자일경우 true, 아닐경우 false
*/
public boolean isNumber(String s)
{
try
{
//숫자로 바뀌는데 오류가 없으면 true
Integer.valueOf(s);
return true;
}
catch(NumberFormatException e)
{
//오류가 생기면 숫자가 아니므로 false
return false;
}
}
}
}