본문 바로가기
Programming/JDBC

Swing(3) 이벤트처리 및 JDBC 연동

by yoon9i 2024. 4. 9.

4. 이벤트 처리 방법 ( event handling )

가. 이벤트 소스 ( event source )
- 이벤트가 발생된 컴포넌트 의미
ex) JButton btnOk = new JButton("Ok");

나. 이벤트소스와 이벤트 핸들러 연결
문법: 이벤트소스.addXXXListener( 값 );

ex) btnOk.addActionListener( new MyButtonEvent( ) );


다. 이벤트 핸들러 ( event handler )
- 이벤트소스에서 발생된 이벤트를 처리하는 클래스 의미.
- 인터페이스로 제공됨. ( JButton 용 인터페이스는 ActionListener 이다. )

- 문법 적용.
가. 이름있는 클래스

a. GUI 클래스 자신이 implements 받는 경우
public class JComponent01_JButton extends JFrame implements ActionListener {
     private JPanel contentPanel;
     .....
     btnOk.addActionListener(this);

     public void actionPerformed ( ActionEvent e ) {
System.out.println("ok");
     }
}

b. GUI 클래스와 별개의 클래스가 implements 받는 경우
public class JComponent01_JButton extends JFrame { 
  ..
     # GUI 클래스
    btnOk.addActionListener( new MyButtonEvent( ) );
}

public class MyButtonEvent implements ActionListener {
     public void actionPerformed ( ActionEvent e ) {
System.out.println("ok");
     }
}


나. 익명클래스

ActionListener btnOK = new ActionListener( ) {
    public void actionPerformed( ActionEvent e ) {
System.out.println("ok");
    }
}

 

* GUI 와 다른 클래스

package app2;

import java.awt.EventQueue;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


public class JComponent01_JButton1_gui와다른클래스 extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JComponent01_JButton1_gui와다른클래스 frame = new JComponent01_JButton1_gui와다른클래스();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public JComponent01_JButton1_gui와다른클래스() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		
		JButton btnOK = new JButton("ok");
		contentPane.add(btnOK);
		
		//1. 다른 클래스로 이벤트 처리
		// 이벤트소스.addXXXListener(값);
		btnOK.addActionListener(new MyButtonEvent());
		
		
		
	}

}

 

* GUI 자신 클래스

package app2;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


public class JComponent01_JButton2_gui자신클래스 extends JFrame 
   implements ActionListener{

	private JPanel contentPane;
	JButton btnOK;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JComponent01_JButton2_gui자신클래스 frame = new JComponent01_JButton2_gui자신클래스();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public JComponent01_JButton2_gui자신클래스() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		
		btnOK = new JButton("ok");
		contentPane.add(btnOK);
		
		//2. GUI 자신 클래스로 이벤트 처리
		// 이벤트소스.addXXXListener(값);
		btnOK.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("OK");
	}

}

 

* 익명클래스

package app2;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class JComponent01_JButton3_익명클래스 extends JFrame implements ActionListener {

	private JPanel contentPane;
	JButton btnOk = null;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JComponent01_JButton3_익명클래스 frame = new JComponent01_JButton3_익명클래스();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public JComponent01_JButton3_익명클래스() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		
		btnOk = new JButton("Ok");
		contentPane.add(btnOk);
		
		// 3. 익명 클래스로 이벤트처리
		btnOk.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.out.println(">>> " + e.getActionCommand()); // 라벨을 출력해줌.
				System.out.println("Ok");
			}
		});
		
		btnOk.addActionListener(e -> System.out.println("Ok2")); // 람다
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Ok");
		
	}

}

 

* 멀티버튼

package app2;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class JComponent01_JButton4_멀티버튼 extends JFrame implements ActionListener {

	private JPanel contentPane;
	JButton btnOk;
	JButton btnCancel;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JComponent01_JButton4_멀티버튼 frame = new JComponent01_JButton4_멀티버튼();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public JComponent01_JButton4_멀티버튼() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		
		btnOk = new JButton("Ok");
		contentPane.add(btnOk);
		
		btnCancel = new JButton("cancel");
		contentPane.add(btnCancel);

		btnOk.addActionListener(this);
		btnCancel.addActionListener(this);		
	}// end 생성자

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
//		System.out.println("button");
//		System.out.println(e.getActionCommand());
//		System.out.println(e.getSource());
		
		if("Ok".equals(e.getActionCommand())) {
			System.out.println("Ok");
		} else {
			System.out.println("cancel");
			// 버튼의 레이블 변경
			// Object 이기때문에 원래타입으로 형변환
			JButton xxx = (JButton)e.getSource();
			xxx.setText("CANCEL");
			xxx.setBackground(Color.CYAN);
		}
	}

}

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 


import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import com.dao.EmpDAO;
import com.dto.EmpDTO;
import com.service.EmpService;
import com.service.EmpServiceImpl;

public class JComponent04_JTextField extends JFrame {

	private JPanel contentPane;
	private JTextField tfEmpno;
	private JTextField tfEname;
	private JTextField tfSal;
	static JComponent04_JTextField frame;
	
	JButton btnSave;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					 frame = new JComponent04_JTextField();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public JComponent04_JTextField() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 768, 461);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("사원번호");
		lblNewLabel.setBounds(12, 94, 50, 15);
		contentPane.add(lblNewLabel);
		
		tfEmpno = new JTextField();
		tfEmpno.setBounds(74, 91, 199, 21);
		contentPane.add(tfEmpno);
		tfEmpno.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("사원명");
		lblNewLabel_1.setBounds(12, 122, 50, 15);
		contentPane.add(lblNewLabel_1);
		
		tfEname = new JTextField();
		tfEname.setColumns(10);
		tfEname.setBounds(74, 119, 199, 21);
		contentPane.add(tfEname);
		
		JLabel lblNewLabel_2 = new JLabel("SAL");
		lblNewLabel_2.setBounds(12, 150, 50, 15);
		contentPane.add(lblNewLabel_2);
		
		tfSal = new JTextField();
		tfSal.setColumns(10);
		tfSal.setBounds(74, 147, 199, 21);
		contentPane.add(tfSal);
		
		btnSave = new JButton("저장");
		btnSave.setBounds(12, 208, 91, 23);
		contentPane.add(btnSave);
		
		// button 이벤트처리
		btnSave.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String empno = tfEmpno.getText();
				String enmae = tfEname.getText();
				String sal = tfSal.getText();
				
				System.out.println(empno+"\t"+enmae+"\t"+sal);
				
				EmpDTO dto = new EmpDTO();
				dto.setEmpno(Integer.parseInt(empno));
				dto.setEname(enmae);
				dto.setSal(Integer.parseInt(sal));
				
				EmpService service = new EmpServiceImpl();
				service.setDao(new EmpDAO());
				int n = service.save(dto);
				System.out.println(n + " 개가 저장되었습니다.");
				// showInternalMessageDialog(Component parentComponent, Object message, String title, int messageType)
				JOptionPane.showInternalMessageDialog(null, n + " 개가 저장되었습니다.",
						"저장", JOptionPane.INFORMATION_MESSAGE);
			}
		});// end button 이벤트처리
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="com.config.EmpMapper">
	<!-- 전체 조회 -->
	<select id="findAll" resultType="EmpDTO">
		SELECT	 empno, 
				 ename, 
				 sal, 
				 date_format(hiredate, '%y') AS hiredate, 
				 deptno
		FROM emp
		ORDER BY empno DESC	
	</select>
	
	<!-- 사원삭제 -->
	<delete id="removeByEmpno" parameterType="int">
		DELETE FROM emp
		WHERE empno = #{empno}
	</delete>
	
	<!-- 사원저장 -->
	<insert id="save" parameterType="EmpDTO">
		INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno )
		VALUES ( #{empno}, #{ename}, 'SALESMAN', 7698, now(), #{sal}, 0, 30 )
	</insert>
	
	
</mapper>
package com.service;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.config.MySqlSessionFactory;
import com.dao.EmpDAO;
import com.dto.EmpDTO;

public class EmpServiceImpl implements EmpService {
	
	private EmpDAO dao;
	
	public void setDao(EmpDAO dao) {
		this.dao = dao;
	}

	// findAll -----------------------------------------------------
	@Override
	public List<EmpDTO> findAll() {
		SqlSession session = null;
		List<EmpDTO> list = null;

		try {
			session = MySqlSessionFactory.getSession();
			// DAO 연동코드
			list = dao.findAll(session);
			//
		} finally {
			session.close();
		}

		return list;
	}

	// save  -----------------------------------------------------
	@Override
	public int save(EmpDTO dto) {
		SqlSession session = null;
		int n = 0;
		
		try {
			session = MySqlSessionFactory.getSession();
			// DAO 연동코드
			n = dao.save(session, dto);
			session.commit();
			//
		} finally {
			session.close();
		}

		return n;
	}
	
	// remove --------------------------------------------

	@Override
	public int removeByEmpno(int empno) {
		SqlSession session = null;
		int n = 0;
		
		try {
			session = MySqlSessionFactory.getSession();
			// DAO 연동코드
			n = dao.removeByEmpno(session, empno);
			session.commit();
			//
		} finally {
			session.close();
		}

		return n;
	}

}

 

package com.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.EmpDTO;

// DB 연동
public class EmpDAO {
	
	// find
	public List<EmpDTO> findAll(SqlSession session) {
		List<EmpDTO> list = session.selectList("com.config.EmpMapper.findAll");
		return list;
	}
	
	// save
	public int save(SqlSession session, EmpDTO dto) {
		return session.insert("com.config.EmpMapper.save", dto);
		
	}
	
	// remove
	public int removeByEmpno(SqlSession session, int empno) {
		return session.delete("com.config.EmpMapper.removeByEmpno",empno);
	}
	
	
	
}

'Programming > JDBC' 카테고리의 다른 글

Swing(4) JComponent  (0) 2024.04.09
Swing(2) 레이아웃  (0) 2024.04.09
Swing(1) 기본설명 및 프로젝트 생성  (0) 2024.04.09
MyBatis(4) 아키텍쳐  (0) 2024.04.05
MyBatis(3) 동적sql 처리  (0) 2024.04.05