import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
public class Swing02 extends JFrame
{
Connection conn; // 연결 객체
Statement stmt;
DefaultTableModel model ;
JTable table;
Swing02()
{
try
{
Class. forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/sampledb" , "root" , "1234" );
stmt = conn.createStatement();
}
catch (Exception e1 )
{
e1.printStackTrace();
} // jdbc 드라이버 로드
try
{
UIManager. setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
}
catch (Exception e )
{
e.printStackTrace();
}
setTitle( "학생관리" );
setDefaultCloseOperation( JFrame. EXIT_ON_CLOSE);
setLayout( new FlowLayout( FlowLayout. LEFT)); // 레이아웃 설정
add( new JLabel( "학번 : "));
JTextField T_id = new JTextField(10);
add( T_id);
add( new JLabel( "이름 : "));
JTextField T_name = new JTextField(10);
add( T_name);
add( new JLabel( " "));
add( new JLabel( "학과 : "));
JTextField T_dept = new JTextField(10);
add( T_dept);
add( new JLabel( " "));
add( new JLabel( "주소 : "));
JTextField T_address = new JTextField(25);
add( T_address);
// Table의 Header 이름 지정
String colName[] = { "학번", "이름" , "학과" , "주소" };
// Table에 들어갈 데이터 목록들(컬럼명, 추가될 Row 개수)
model = new DefaultTableModel(colName , 0);
// Table 생성
table = new JTable( model);
table.setPreferredScrollableViewportSize( new Dimension(470, 200));
add( table);
add( new JScrollPane(table ));
add( new JLabel( " " ));
JButton list = new JButton( "목록"); // // 'List'버튼 생성
add( list);
add( new JLabel( " " ));
JButton insert = new JButton( "등록"); // 'Insert'버튼 생성
add( insert);
add( new JLabel( " " ));
JButton update = new JButton( "수정"); // 'update'버튼 생성
add( update);
add( new JLabel( " " ));
JButton delete = new JButton( "삭제"); // 'delete'버튼 생성
add( delete);
add( new JLabel( " " ));
JButton search = new JButton( "검색"); // 'search'버튼 생성
add( search);
add( new JLabel( " " ));
JButton out = new JButton( "종료"); // 'out'버튼 생성
add( out);
// 종료 이벤트 처리
addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
try
{
if( conn != null)
{
conn.close();
}
}
catch (SQLException e1 )
{
e1.printStackTrace();
}
JOptionPane.showMessageDialog( null, "Good Bye", "Exit Dialog" , JOptionPane.INFORMATION_MESSAGE );
}
});
table.addMouseListener( new MouseListener()
{
@Override
public void mouseClicked(MouseEvent e)
{
table = ( JTable) e.getComponent(); // 클릭한 테이블 구하기
model = (DefaultTableModel)table .getModel(); // 테이블의 모델 구하기
String id = (String)model .getValueAt(table.getSelectedRow(), 0);
T_id.setText( id);
String name = (String)model .getValueAt(table.getSelectedRow(), 1);
T_name.setText( name);
String dept = (String)model .getValueAt(table.getSelectedRow(), 2);
T_dept.setText( dept);
String address = (String)model .getValueAt(table.getSelectedRow(), 3);
T_address.setText( address);
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
});
// ----------------------------------------------------------------------------------
// 익명 클래스 이용 (이벤트 처리) -> 목록 처리
list.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
List(); // 목록 갱신 메소드 호출
}
});
// 익명 클래스 이용2 (이벤트 처리) -> 등록 처리
insert.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
try
{
String n = T_name.getText();
String d = T_dept.getText();
String i = T_id.getText();
String a = T_address.getText();
// insert문 실행
int result = stmt.executeUpdate("insert into student values('"+n+"','"+ d+ "','"+i +"','" +a +"')" );
if( result == 1)
{
List(); // 목록 갱신 메소드 호출
JOptionPane.showMessageDialog( null, "Insert Complete!", "Complete Dialog", JOptionPane.INFORMATION_MESSAGE );
}
}
catch(Exception ex )
{
System. out.println(ex .getMessage());
}
}
});
// 익명 클래스 이용3 (이벤트 처리) -> 검색 처리
search.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(( T_id.getText()).equals( ""))
{
JOptionPane.showMessageDialog( null, "No ID in TextField!!!", "Error Dialog", JOptionPane.ERROR_MESSAGE );
return; // 함수종료
}
else
{
try
{
String i = T_id.getText();
// select문 실행
ResultSet rs = stmt.executeQuery("select * from student where id='"+i+"'");
// JTable 초기화
model.setNumRows(0);
if( rs.next())
{
T_id.setText( rs.getString( "id"));
T_name.setText( rs.getString( "name"));
T_dept.setText( rs.getString( "dept"));
T_address.setText( rs.getString( "address"));
String[] row = new String[4]; // 컬럼의 개수가 4
row[0] = rs.getString("id" );
row[1] = rs.getString("name" );
row[2] = rs.getString("dept" );
row[3] = rs.getString("address" );
model.addRow( row);
}
rs.close();
}
catch(Exception ex )
{
System. out.println(ex .getStackTrace());
}
}
}
});
// 익명 클래스 이용4 (이벤트처리) -> 수정 처리
update.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(( T_id.getText()).equals( ""))
{
JOptionPane.showMessageDialog( null, "No ID in TextField!!!", "Error Dialog", JOptionPane.ERROR_MESSAGE );
return; // 함수종료
}
else
{
int result = JOptionPane.showConfirmDialog( null, "Update?" , "Update Dialog", JOptionPane.YES_NO_OPTION);
if( result == JOptionPane.YES_OPTION )
{
try
{
String i = T_id.getText();
String n = T_name.getText();
String d = T_dept.getText();
String a = T_address.getText();
// update문 실행
stmt.executeUpdate( "update student set name='"+n+"', dept='"+ d+ "', address='"+a +"' where id='"+i+"'");
List(); // 목록 갱신 메소드 호출
JOptionPane.showMessageDialog( null, "Update Complete!", "Complete Dialog", JOptionPane.INFORMATION_MESSAGE );
}
catch(Exception ex )
{
System. out.println(ex .getMessage());
}
}
else if (result == JOptionPane.NO_OPTION )
{
}
}
}
});
// 익명 클래스 이용5 (이벤트 처리) -> 삭제 처리
delete.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(( T_id.getText()).equals( ""))
{
JOptionPane.showMessageDialog( null, "No ID in TextField!!!", "Error Dialog", JOptionPane.ERROR_MESSAGE );
return; // 함수종료
}
else if ((T_dept .getText()).equals(""))
{
JOptionPane.showMessageDialog( null, "No Dept in TextField!!!", "Error Dialog", JOptionPane.ERROR_MESSAGE );
return; // 함수종료
}
else if ((T_name .getText()).equals(""))
{
JOptionPane.showMessageDialog( null, "No Name in TextField!!!", "Error Dialog", JOptionPane.ERROR_MESSAGE );
return; // 함수종료
}
else if ((T_address .getText()).equals(""))
{
JOptionPane.showMessageDialog( null, "No address in TextField!!!", "Error Dialog", JOptionPane.ERROR_MESSAGE );
return; // 함수종료
}
else
{
int result = JOptionPane.showConfirmDialog( null, "Delete?" , "Delete Dialog", JOptionPane.YES_NO_OPTION);
if( result == JOptionPane.YES_OPTION )
{
try
{
String i = T_id.getText();
// delete문 실행
int result2 = stmt.executeUpdate("delete from student where id='" +i +"'" );
if( result2 == 1)
{
List(); // 목록 갱신 메소드 호출
// TextArea 초기화
T_id.setText( "");
T_name.setText( "");
T_dept.setText( "");
T_address.setText( "");
JOptionPane.showMessageDialog( null, "Delete Complete!", "Complete Dialog", JOptionPane.INFORMATION_MESSAGE );
}
}
catch(Exception ex )
{
System. out.println(ex .getStackTrace());
}
}
else if (result == JOptionPane.NO_OPTION )
{
}
}
}
});
// 익명 클래스 이용6 (이벤트 처리) -> 종료 처리
out.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
try
{
if( conn != null)
{
conn.close();
}
}
catch (SQLException e1 )
{
e1.printStackTrace();
}
JOptionPane.showMessageDialog( null, "Good Bye", "Exit Dialog" , JOptionPane.INFORMATION_MESSAGE );
dispose();
}
});
// ----------------------------------------------------------------------------------
setResizable( false); // 화면 크기 고정
setSize(550, 420); // 화면 크기 설정
setVisible( true); // 화면 출력 설정
}
public void List()
{
try
{
System. out.println("JDBC Connection Complete!");
// select문 실행
ResultSet rs = stmt.executeQuery( "select * from student"); // SQL문이 rs에 저장된다.
// JTable 초기화
model.setNumRows(0);
while(rs .next())
{
String[] row = new String[4]; // 컬럼의 개수가 4
row[0] = rs.getString( "id");
row[1] = rs.getString( "name");
row[2] = rs.getString( "dept");
row[3] = rs.getString( "address");
model.addRow( row);
}
rs.close(); // ResultSet을 닫는다.
}
catch(Exception ex )
{
System. out.println(ex .getStackTrace());
}
}
public static void main(String [] args)
{
new Swing02(); // 생성자 호출
}
}