Swing - Layout / 이벤트

준동이·2023년 4월 12일
0

문제 풀이

기획

  1. 데이터베이스 - ERD에서 sql이 나오는 것
    select distinct sido from zipcode; - 시
    select distinct gugun from zipcode where sido = '서울'; - 서울의 구군
    select distinct dong from zipcode where sido = '서울' and gugun = '중랑구'; - 서울 중랑구 동

  2. UML(Class Diagram) - 공부(중요)
    Class Diagram - 클래스 / 메서드 / 필드 중심
    Sequence Dialgram - 메서드 호출
    use case Dialgram - 기능중심

  • ZipcodeSearchUI
    SidoComboboxModel - 콤보박스용 모델
    GugunComboboxModel
    DOngComboboxModel
    getSize()
    getElementAt()
    ZipcodeTO에서 가져오고 -> ZipcodeDAO에서 가져오기

TO
setXXX
getXXX 메서드가 있다.

DAO - sql과 연동

ArrayList<ZipcodeTO> listSido()
ArrayList<ZipcodeTO> listGugun(String strSido)
ArrayList<ZipcodeTO> listDong(String strSido, String strGugun)
ArrayList<ZipcodeTO> istAddress(String strSido, String strGugun, String StrDong)



만들어보기

ZipcodeTO 클래스

package model;

public class ZipcodeTO {
	private String zipcode;
	private String sido;
	private String gugun;
	private String dong;
	private String ri;
	private String bunji;
	private String seq;
	public String getZipcode() {
		return zipcode;
	}
	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}
	public String getSido() {
		return sido;
	}
	public void setSido(String sido) {
		this.sido = sido;
	}
	public String getGugun() {
		return gugun;
	}
	public void setGugun(String gugun) {
		this.gugun = gugun;
	}
	public String getDong() {
		return dong;
	}
	public void setDong(String dong) {
		this.dong = dong;
	}
	public String getRi() {
		return ri;
	}
	public void setRi(String ri) {
		this.ri = ri;
	}
	public String getBunji() {
		return bunji;
	}
	public void setBunji(String bunji) {
		this.bunji = bunji;
	}
	public String getSeq() {
		return seq;
	}
	public void setSeq(String seq) {
		this.seq = seq;
	}
	
	
}

ZipcodeDAO 클래스

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class ZipcodeDAO {
	private Connection conn = null;
	// DAO는 생성자가 있어야한다. / 다른곳에서 해도 됨
	public ZipcodeDAO() {
		// TODO Auto-generated constructor stub
		String url = "jdbc:mysql://localhost:3306/project";
		String user = "project";
		String password = "1234";

		try {
			Class.forName("org.mariadb.jdbc.Driver");
			// this가 Connection conn을 가르킨다
			this.conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} // finally 안써줌
	}
	

	public ArrayList<ZipcodeTO> listSido() {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> sidos = new ArrayList<>();
		try {
			String sql = "select distinct sido from zipcode";
			pstmt = this.conn.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setSido(rs.getString("sido"));
				sidos.add(to);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if (rs != null)try {rs.close();} catch (SQLException e1) {}
			if (pstmt != null)try {pstmt.close();} catch (SQLException e1) {}
			if (conn != null)try {conn.close();} catch (SQLException e1) {}
		}
		return sidos;
	}
	

	public ArrayList<ZipcodeTO> listGugun(String strSido) {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> guguns = new ArrayList<>();
		try {
			String sql = "select distinct gugun from zipcode where sido = ?";
			pstmt = this.conn.prepareStatement(sql);
			pstmt.setString(1, strSido);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setGugun(rs.getString("gugun"));
				guguns.add(to);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if (rs != null)try {rs.close();} catch (SQLException e1) {}
			if (pstmt != null)try {pstmt.close();} catch (SQLException e1) {}
			if (conn != null)try {conn.close();} catch (SQLException e1) {}
		}
		return guguns;
	}
	

	public ArrayList<ZipcodeTO> listDong(String strSido, String strGugun) {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> dongs = new ArrayList<>();
		try {
			String sql = "select distinct dong from zipcode where sido = ? and gugun = ?";
			pstmt = this.conn.prepareStatement(sql);
			pstmt.setString(1, strSido);
			pstmt.setString(2, strGugun);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setDong(rs.getString("dong"));
				dongs.add(to);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if (rs != null)try {rs.close();} catch (SQLException e1) {}
			if (pstmt != null)try {pstmt.close();} catch (SQLException e1) {}
			if (conn != null)try {conn.close();} catch (SQLException e1) {}
		}
		return dongs;
	}

	public ArrayList<ZipcodeTO> listAddress(String strSido, String strGugun, String strDong) {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> addresses = new ArrayList<>();
		try {
			String sql = "select zipcode, ri, bunji from zipcode where sido=? and gugun=? and dong=?";
			pstmt = this.conn.prepareStatement( sql );
			pstmt.setString( 1, strSido );
			pstmt.setString( 2, strGugun );
			pstmt.setString( 3, strDong );
			
			rs = pstmt.executeQuery();
			
			while( rs.next() ) {
				ZipcodeTO to = new ZipcodeTO();
				to.setZipcode( rs.getString( "zipcode" ) );
				to.setRi( rs.getString( "ri" ) );
				to.setBunji( rs.getString( "bunji" ) );
				addresses.add( to );
			}
			
			
		} catch( SQLException e ) {
			// TODO Auto-generated catch block
			System.out.println( "[에러] " + e.getMessage() );
		} finally {
			if( rs != null ) try { rs.close(); } catch( SQLException e ) {}
			if( pstmt != null ) try { pstmt.close(); } catch( SQLException e ) {}
			if( conn != null ) try { conn.close(); } catch( SQLException e ) {}			
		}
		
		return addresses;

	}
}


SidoComboBoxModel

package zipcodeModel;

import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;

import model.ZipcodeDAO;
import model.ZipcodeTO;

public class SidoComboBoxModel extends DefaultComboBoxModel<String> {
	private ArrayList<ZipcodeTO> sidos;
	
	
	public SidoComboBoxModel() {
		// TODO Auto-generated constructor stub 
		//sidos = new ArrayList<>();
		//ZipcodeTO to = new ZipcodeTO();
		//to.setSido("시도");
		
		//sidos.add(to);
		
		ZipcodeDAO dao = new ZipcodeDAO();
		sidos = dao.listSido();
	}
	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return sidos.size();
	}
	
	@Override
	public String getElementAt(int index) {
		// TODO Auto-generated method stub
		// sido데이터 가져오기
		ZipcodeTO to = sidos.get(index);
		return to.getSido();
	}
}

GugunComboBoxModel

package zipcodeModel;

import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;

import model.ZipcodeDAO;
import model.ZipcodeTO;

public class GugunComboBoxModel extends DefaultComboBoxModel<String> {
	private ArrayList<ZipcodeTO> guguns;
	
	public GugunComboBoxModel() {
		// TODO Auto-generated constructor stub
		guguns = new ArrayList<>();
		ZipcodeTO to = new ZipcodeTO();
		to.setGugun("구군");
		
		guguns.add(to);
	}
	
	// 데이터베이스에 조회한 시도 나오게하기위해 생성자 오버로딩 하였음./strSido가 DAO에 listGugun으로
	public GugunComboBoxModel(String strSido) {
		ZipcodeDAO dao = new ZipcodeDAO();
		guguns = dao.listGugun(strSido);
	}
	
	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return guguns.size();
	}
	
	@Override
	public String getElementAt(int index) {
		// TODO Auto-generated method stub
		ZipcodeTO to = guguns.get(index);
		return to.getGugun();
	}
}

DongComboBoxModel

package zipcodeModel;

import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;

import model.ZipcodeDAO;
import model.ZipcodeTO;

public class DongComboBoxModel extends DefaultComboBoxModel<String> {
	private ArrayList<ZipcodeTO> dongs;
	
	public DongComboBoxModel() {
		// TODO Auto-generated constructor stub
		dongs = new ArrayList<>();
		ZipcodeTO to = new ZipcodeTO();
		to.setDong("동");
		
		dongs.add(to);
	}
	
	public DongComboBoxModel(String strSido, String strGugun) {
		ZipcodeDAO dao = new ZipcodeDAO();
		dongs = dao.listDong(strSido, strGugun); 
	}
	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return dongs.size();
	}
	
	@Override
	public String getElementAt(int index) {
		// TODO Auto-generated method stub
		ZipcodeTO to = dongs.get(index);
		return to.getDong();
	}
}

ZipcodeSearchUI01
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

import model.ZipcodeDAO;
import model.ZipcodeTO;
import zipcodeModel.DongComboBoxModel;
import zipcodeModel.GugunComboBoxModel;
import zipcodeModel.SidoComboBoxModel;

public class ZipcodeSearchUI01 extends JFrame {
	private JPanel contentPane;
	private JComboBox combo1;
	private JComboBox combo2;
	private JComboBox combo3;
	private JTextArea textArea;

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

	/**
	 * Create the frame.
	 */
	public ZipcodeSearchUI01() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 600, 800);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);

		contentPane.setLayout(null);

		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(
				new EtchedBorder(EtchedBorder.LOWERED, new Color(255, 255, 255), new Color(160, 160, 160)),
				"\uC6B0\uD3B8\uBC88\uD638 \uAC80\uC0C9\uAE30", TitledBorder.LEADING, TitledBorder.TOP, null,
				new Color(0, 0, 0)));
		panel.setBounds(6, 15, 566, 55);
		contentPane.add(panel);
		panel.setLayout(null);

		combo1 = new JComboBox();
//		combo1.setModel(new DefaultComboBoxModel(new String[] {"시도"}));
		combo1.setModel(new SidoComboBoxModel());
		combo1.setSelectedIndex(0);
		combo1.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
//					System.out.println(combo1.getSelectedItem());
					// 리턴이 object로 나와서 String으로 형변환 해줌
					if (combo2 != null) {
						combo2.setModel(new GugunComboBoxModel((String) combo1.getSelectedItem()));
						combo2.setSelectedIndex(0);
					}
				}
			}
		});
		combo1.setBounds(21, 20, 160, 21);
		panel.add(combo1);

		combo2 = new JComboBox();
//		combo2.setModel(new DefaultComboBoxModel(new String[] {"구군"}));
		combo2.setModel(new GugunComboBoxModel());
		combo2.setSelectedIndex(0);
		combo2.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					if (combo3 != null) {
						combo3.setModel(new DongComboBoxModel((String) combo1.getSelectedItem(), (String) combo2.getSelectedItem()));
						combo3.setSelectedIndex(0);
					}
				}
			}
		});
		combo2.setBounds(202, 20, 160, 21);
		panel.add(combo2);

		combo3 = new JComboBox();
//		combo3.setModel(new DefaultComboBoxModel(new String[] {"동"}));
		combo3.setModel(new DongComboBoxModel());
		combo3.setSelectedIndex(0);
		combo3.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					textArea.setText("");
					
					String sido = (String)combo1.getSelectedItem();
					String gugun = (String)combo2.getSelectedItem();
					String dong = (String)combo3.getSelectedItem();
					
					ZipcodeDAO dao = new ZipcodeDAO();
					ArrayList<ZipcodeTO> addresses = dao.listAddress(sido, gugun, dong);
					
					for(ZipcodeTO to : addresses) {
						String address = String.format("[%s] %s %s %s %s %s", to.getZipcode(), sido, gugun, dong, to.getRi(),
								to.getBunji());
								textArea.append(address + System.lineSeparator());
					}
				}
			}
		});
		combo3.setBounds(383, 20, 160, 21);
		panel.add(combo3);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setEnabled(false);
		scrollPane.setBounds(12, 80, 560, 671);
		contentPane.add(scrollPane);

		textArea = new JTextArea();
		textArea.setEditable(false);
		scrollPane.setViewportView(textArea);
	}
}



Layout - 배치(전체회면의 윤곽 잡기)

레이아웃은 전부다 클래스이다.

컨테이너, 컴포넌트 배치

NullLayout(Absolute Layout) - 좌표배치
BoderLayout - 한 화면을 5개로 분할해서 배치(동, 서, 남, 북, 중앙)
FlowLayout - 행 또는 열로 배치
GridLayout - 모눈에 배치
CardLayout - 한 장씩 덮어쓰면서 배치

setLayout, getLayout
레이아웃 상태를 주는것을 setLayout
가져오는것을 getLayout



컨테이너는 기본 레이아웃이 있다.

(기본일뿐 절대적인것은 아님. 바꿔도 됨)
JFrame의 기본 레이아웃은 Border Layout
JPanel 은 Flow Layout

만들어보기
레아이웃 JFrame 클래스를 만듦.
Layout은 BoderLayout으로 돼있음.
absolute선택하면 null로 돼있음

버튼을 5개 분활(동서남북중앙 이렇게 줄 수있어서 버튼으로 줬음)



패널을 생성하여 패널에 버튼생성 후 배치조정해줌



west부분을 패널로 바꾸고 버튼을 2개 넣어줬을때의 디자인



버튼을 쭉 생성하고 실행후 창 늘리면 생성한만큼 나옴



gridLayout

rows와 cols가 생겨서 지정해주고 버튼 아무렇게나 던져도 오른쪽처럼 똑같이 나온다.
계산기, 달력 등 사용



CardLayout

패널을 주고 panel2에는 3개의 패널을 추가적으로 더 넣어주고 각각 백그라운드 컬러로 색상을 입혀놨다.



클릭시 패널보게하기 이벤트주기

버튼을 클릭하면 해당 패널을 띄운다



panel2안의 panel들의 Layout을 absolute로 바꾸고 버튼을 각각 줬음.



소스를 보면 각 panel의 이름이 적혀져있다.



각 버튼에 해당 패널의 이름을 넣어줬다.
((CardLayout)panel2.getLayout()).show(panel2,"name_2345917812918300") 는
panel2의 name_2345917812918300의 이름을 가진 패널을 의미.

JButton btn1 = new JButton("Panel1");
		btn1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// name_2345905414095100
                // CardLayout으로 형변환
				((CardLayout)panel2.getLayout()).show(panel2,"name_2345905414095100");
			}
		});
		panel1.add(btn1);
		
		JButton btn2 = new JButton("Panel2");
		btn2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// name_2345917812918300
				// 패널 2에 이 이름을 보여줘
				((CardLayout)panel2.getLayout()).show(panel2,"name_2345917812918300");
			}
		});
		panel1.add(btn2);
		
		JButton btn3 = new JButton("Panel3");
		btn3.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// name_2345930989913200
				((CardLayout)panel2.getLayout()).show(panel2,"name_2345930989913200");
			}
		});

해당 버튼을 눌렀을때 각각의 패널들을 볼 수 있는데 각기 다른 환경을 가지고있다는것을 알 수 있다.



이벤트 주기 - Interface / Adapter class

이벤트 수동으로 주기
1. 이벤트를 연결하는 메서드
2. 이벤트가 발생하면 처리될 이벤트 클래스(interface / dapter class)
3. 이벤트가 발생하면 처리할 이벤트 핸들러 (이벤트 처리용 메서드)
이 3가지가 맞물려 돌아간다.

이벤트가 정의된 클래스 - 인터페이스에 정의돼있어서 우리가 가져다가 쓴다.
ActionEvent는 엔터



이벤트 종류





인터페이스

인터페이스는 구현해야되는것들이 나온다 / 구현할것이 많아 번거로움이 있다.
이때 메서드들은 "이벤트 핸들러"라고 한다.

JButton btn1 = new JButton("New button");
		// 1. 이벤트를 연결하는 메서드
		// 2. 이벤트가 발생하면 처리될 이벤트 클래스
		// 3. 이벤트가 발생하면 처리할 이벤트 핸들러 (이벤트 처리용 메서드)
		
		// 인터페이스이기때문에 안에있는 것들은 구현해줘야한다.
		btn1.addMouseListener(new MouseListener() {
			
			// 이벤트 핸들러
			@Override
            // 마우스 클릭하고 땔 때
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseReleased");
			}
			
			@Override
            // 마우스 클릭 누르고있는상태
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mousePressed");
			}
			
			@Override
            // 올려져있는 마우스 벗어날때
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseExited");
			}
			
			@Override
            // 마우스 올렸을때
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseEntered");
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseClicked");
			}
		});



어댑터

인터페이스는 구현해야할것이 많아서 불편하지만 어댑터는 사용 사용하고싶은것만 골라서 오버라이딩하여 사용가능

JButton btn2 = new JButton("New button");
		btn2.addMouseListener(new MouseAdapter() {
			
			// 마우스 오른쪽클릭으로 오버라이드/임플리먼트... 클릭 후 원하는것 오버라이딩
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseClicked");
			}
			
		});

변수.addMouseListener(new MouseAdapter() ){}안에 마우스 오른쪽클릭 -> overred / implement.. 클릭 후 원하는 메서드 선택 후 오버라이딩하여 사용

출력



엔터키로 가져오기

마우스로 버튼 클릭해서 가져왔었지만 엔터키로 가져오게 하기.

textField = new JTextField();
		
		// windowbuilder에서 만듦
		textField.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println(textField.getText());
			}
		});
		/*
		 수동 코딩
		textField.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.out.println(textField.getText());
			}
		});
		*/
		textField.setBounds(12, 107, 170, 21);
		contentPane.add(textField);
		textField.setColumns(10);
		
		JButton btn5 = new JButton("New button");
		btn5.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				System.out.println("mouseClicked");
			}
		});



이벤트 객체

이벤트를 줬을때의 상황이 담겨진것이 이벤트 객체

해당 버튼의 마우스 위치의 좌표값 출력

// 버튼에 올라가있는 커서의 위치가 바뀔때마다 위치값(좌표값)이 바뀌어서 나온다.
				System.out.println(e.getX());
				System.out.println(e.getY());

버튼을 누르는 마우스 커서의 위치에 따라 값이 출력



클릭 카운트 출력

// 클릭 카운트 / 더블클릭하면 1,2출력 그냥 클릭만하면 1만 출력됨
System.out.println(e.getClickCount());

한번씩만 클릭하면 1처럼 1만 출력이 되며, 더블클릭할시 1,2 이렇게 더블클릭했다고 뜸.
3번 연속 클릭하면 1,2,3 이런식으로 출력



클릭시 변경

// 이벤트가 발생한곳을 바꿔준다. / 클릭시 클릭됨으로 변경됨
JButton btn = (JButton)e.getSource();
btn.setText("클릭됨");



이벤트 통합

버튼 여러개의 이벤트를 통합하여 한꺼번에 주기
inner 클래스를 만들어 버튼에내한 내용을 선언

public EventEx02() {
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 800, 600);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JButton btn1 = new JButton("New button");
        // 밑에 MouseListener 구현한 UserMouseEvent1() 객체를 넣어줘서 통합 이벤트주기
		btn1.addMouseListener(new UserMouseEvent1());
		btn1.setBounds(12, 10, 97, 23);
		contentPane.add(btn1);
		
		JButton btn2 = new JButton("New button");
        // 밑에 MouseListener 구현한 UserMouseEvent1() 객체를 넣어줘서 통합 이벤트주기
		btn2.addMouseListener(new UserMouseEvent1());
		btn2.setBounds(12, 43, 97, 23);
		contentPane.add(btn2);
		
		JButton btn3 = new JButton("New button");
        // 밑에 MouseListener 구현한 UserMouseEvent1() 객체를 넣어줘서 통합 이벤트주기
		btn3.addMouseListener(new UserMouseEvent1());
		btn3.setBounds(12, 76, 97, 23);
		contentPane.add(btn3);
	}
	
	
	// 통합 이벤트를 가지는 인터페이스를 구현한 클래스를 생성하여 이벤트 한번에 주기
	class UserMouseEvent1 implements MouseListener {

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

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseClicked");
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseClicked");
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseClicked");
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseClicked");
		}
		
	}



어댑터를 사용하기

// 어댑터 상속받아서 필요한것만 오버라이드 하여 클래스에 있는 이벤트 기능을 한번에 주기
	class UserMouseEvent2 extends MouseAdapter {

		@Override
		public void mouseClicked(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseClicked");
			
			// 버튼의 이름값 출력
			System.out.println( ( (JButton)e.getSource() ).getText() );
			
			// getName은 따로 설정해주면 됨./ default값은 아니다
			System.out.println( ( (JButton)e.getSource() ).getName() );
			
			String name =  ((JButton)e.getSource()).getName();
			switch(name) {
			case "button1" :
				System.out.println("btn1 mouseClicked");
				break;
			case "button2" :
				System.out.println("btn2 mouseClicked");
				break;
			case "button3" :
				System.out.println("btn3 mouseClicked");
				break;
			default :
				System.out.println("에러");
			}
			
		}
		
	}

버튼 3개 다 클릭시 클래스에 있는 이벤트 메서드들이 실행



getName이란 ?

getName은 라벨명으로 찾아주거나 이름을 정해줄 수 있음.
동그라미친 부분이 확장인데 확장시켜서 name란에 정해주면 getName이 출려된다.



JuminCheckUI

내부클래스가 아닌 외부클래스로 처리해보기 (MouseAdapter 사용)

MouseAdapterEx01 클래스에 마우스 클릭 이벤트를 만들고

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseAdapterEx01 extends MouseAdapter {

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("mouseClicked11");
	}
	
}

버튼1번에 MouseAdapterEx01 클래스 객체를 넣어줌

JButton btn1 = new JButton("버튼1");
		btn1.setName("button1");
        // MouseAdapterEx01 클래스 객체 넣어줌
		btn1.addMouseListener(new MouseAdapterEx01());
		btn1.setBounds(12, 10, 97, 23);
		contentPane.add(btn1);



주민번호 검사기
디자인

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.BorderLayout;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.GridLayout;
import javax.swing.JButton;
import java.awt.FlowLayout;

public class JuminCheckUI extends JFrame {

	private JPanel contentPane;
	private JTextField textField1;
	private JTextField textField2;
	private JTextField textField3;

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

	/**
	 * Create the frame.
	 */
	public JuminCheckUI() {
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 573, 473);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(new BorderLayout(0, 0));
		
		JPanel panel1 = new JPanel();
		FlowLayout flowLayout = (FlowLayout) panel1.getLayout();
		flowLayout.setVgap(15);
		flowLayout.setHgap(10);
		contentPane.add(panel1, BorderLayout.NORTH);
		
		textField1 = new JTextField();
		textField1.setEditable(false);
		panel1.add(textField1);
		textField1.setColumns(20);
		
		JLabel lblNewLabel = new JLabel("~");
		panel1.add(lblNewLabel);
		
		textField2 = new JTextField();
		textField2.setEditable(false);
		panel1.add(textField2);
		textField2.setColumns(20);
		
		JPanel panel2 = new JPanel();
		contentPane.add(panel2, BorderLayout.CENTER);
		panel2.setLayout(new GridLayout(4, 3, 2, 2));
		
		JButton btn1 = new JButton("7");
		panel2.add(btn1);
		
		JButton btn2 = new JButton("8");
		panel2.add(btn2);
		
		JButton btn3 = new JButton("9");
		panel2.add(btn3);
		
		JButton btn4 = new JButton("4");
		panel2.add(btn4);
		
		JButton btn5 = new JButton("5");
		panel2.add(btn5);
		
		JButton btn6 = new JButton("6");
		panel2.add(btn6);
		
		JButton btn7 = new JButton("1");
		panel2.add(btn7);
		
		JButton btn8 = new JButton("2");
		panel2.add(btn8);
		
		JButton btn9 = new JButton("3");
		panel2.add(btn9);
		
		JButton btn10 = new JButton("0");
		panel2.add(btn10);
		
		JButton btn11 = new JButton("DEL");
		panel2.add(btn11);
		
		JButton btn12 = new JButton("검사");
		panel2.add(btn12);
		
		JPanel panel3 = new JPanel();
		contentPane.add(panel3, BorderLayout.SOUTH);
		panel3.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 15));
		
		textField3 = new JTextField();
		textField3.setEditable(false);
		textField3.setText("결과 :");
		panel3.add(textField3);
		textField3.setColumns(48);
	}
}
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.BorderLayout;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.GridLayout;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JTextArea;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class JuminCheckUI extends JFrame {

	private JPanel contentPane;
	private JTextField textField3;
	private JTextArea textArea2;
	private JTextArea textArea1;

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

	/**
	 * Create the frame.
	 */
	public JuminCheckUI() {
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 573, 473);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(new BorderLayout(0, 0));

		JPanel panel1 = new JPanel();
		FlowLayout flowLayout = (FlowLayout) panel1.getLayout();
		flowLayout.setVgap(15);
		flowLayout.setHgap(10);
		contentPane.add(panel1, BorderLayout.NORTH);

		textArea1 = new JTextArea();
		panel1.add(textArea1);

		JLabel lblNewLabel = new JLabel("~");
		panel1.add(lblNewLabel);

		textArea2 = new JTextArea();
		panel1.add(textArea2);

		JPanel panel2 = new JPanel();
		contentPane.add(panel2, BorderLayout.CENTER);
		panel2.setLayout(new GridLayout(4, 3, 2, 2));

		JButton btn1 = new JButton("7");
		btn1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("7");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("7");
				}
			}
		});
		panel2.add(btn1);

		JButton btn2 = new JButton("8");
		btn2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("8");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("8");
				}
			}
		});
		panel2.add(btn2);

		JButton btn3 = new JButton("9");
		btn3.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("9");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("9");
				}
			}
		});
		panel2.add(btn3);

		JButton btn4 = new JButton("4");
		btn4.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("4");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("4");
				}
			}
		});
		panel2.add(btn4);

		JButton btn5 = new JButton("5");
		btn5.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("5");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("5");
				}
			}
		});
		panel2.add(btn5);

		JButton btn6 = new JButton("6");
		btn6.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("6");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("6");
				}
			}
		});
		panel2.add(btn6);

		JButton btn7 = new JButton("1");
		btn7.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("1");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("1");
				}
			}
		});
		panel2.add(btn7);

		JButton btn8 = new JButton("2");
		btn8.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("2");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("2");
				}
			}
		});
		panel2.add(btn8);

		JButton btn9 = new JButton("3");
		btn9.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("3");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("3");
				}
			}
		});
		panel2.add(btn9);

		JButton btn10 = new JButton("0");
		btn10.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (textArea1.getText().length() < 6) {
					textArea1.append("0");
				} else if (textArea2.getText().length() <= 6) {
					textArea2.append("0");
				}
			}
		});
		panel2.add(btn10);

		JButton btn11 = new JButton("DEL");
		btn11.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				textArea1.setText("");
				textArea2.setText("");
			}
		});
		panel2.add(btn11);

		JButton btn12 = new JButton("검사");
		btn12.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {

				String jumin1 = textArea1.getText();
				String jumin2 = textArea2.getText();

				String strJumin = jumin1 + jumin2;

				int[] bits = { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };
				int sum = 0;

				for (int i = 0; i < bits.length; i++) {
					sum += Integer.parseInt(strJumin.substring(i, i + 1)) * bits[i];
				}
				int resultNum = (11 - (sum % 11)) % 10;
				int lastNum = Integer.parseInt(strJumin.substring(12, 13));

				if (lastNum == resultNum) {
					textField3.setText("결과 : 정상");
				} else {
					textField3.setText("결과 : 비정상");
				}

			}
		});
		panel2.add(btn12);

		JPanel panel3 = new JPanel();
		contentPane.add(panel3, BorderLayout.SOUTH);
		panel3.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 15));

		textField3 = new JTextField();
		textField3.setEditable(false);
		textField3.setText("결과 :");
		panel3.add(textField3);
		textField3.setColumns(48);
	}

}
profile
개발자 꿈나무

0개의 댓글