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 |