자바 스윙 의 세 가지 등록 이 벤트 를 비교 하 는 방법

4267 단어
Swing 현재 자바 에서 빠 질 수 없 는 창 도구 모음 으로 그래 픽 사용자 인터페이스 (GUI) 프로그램 을 만 드 는 강력 한 도구 입 니 다.Java Swing 구성 요 소 는 사용자 행동 에 응답 하기 위해 다양한 이벤트 가 자동 으로 발생 합 니 다.자바 는 이 벤트 를 이벤트 클래스 로 패키지 하고 이벤트 클래스 마다 이벤트 감청 기 를 정의 합 니 다.구성 요소 등록 이벤트 모니터 방법 은 이 구성 요소 가 지정 한 이벤트 에 응답 해 야 한 다 는 것 을 나타 낸다.즉, 우 리 는 감청 기 를 등록 하고 사건 원 에서 발생 하 는 사건 을 감청 함으로써 사건 처리 프로그램 에서 우리 가 처리 해 야 할 사용자 행 위 를 처리 할 수 있다.
 
          Java Swing 에서 각 구성 요소 이 벤트 를 처리 하 는 일반적인 절 차 는:
          1.  새 구성 요소.
          2.  이 구성 요 소 를 해당 패 널 에 추가 합 니 다.
          3.  이벤트 원본 을 감청 하기 위해 감청 기 를 등록 합 니 다.
          4.  이 벤트 를 처리 하 는 방법 을 정의 합 니 다.
 
          등록 사건 은 일반적으로 두 가지 방식 을 사용 합 니 다. 하 나 는 하나의 모니터 와 여러 개의 if 문 구 를 이용 하여 어떤 구성 요소 가 발생 하 는 사건 인지 결정 하 는 것 입 니 다.둘째, 여러 개의 내부 클래스 를 사용 하여 서로 다른 구성 요소 가 발생 하 는 각종 사건 에 응답 하 는 것 이다. 하 나 는 익명 내부 클래스 를 사용 하고 하 나 는 일반 내부 클래스 를 사용한다.
아래 에 우 리 는 상기 세 가지 방식 으로 사건 을 등록 합 니 다.상기 세 가지 방식 이 어떻게 사건 의 처리 방법 을 실현 하 는 지 설명 한다.
 
          1. 하나의 모니터 여러 if 문 구 를 사용 하여 이 루어 집 니 다.
          이런 방식 에서 우 리 는 Action Listener 인 터 페 이 스 를 계승 하고 actionPerformed 방법 을 실현 해 야 한다.getAction Command () 방법 으로 이벤트 의 이벤트 원본 을 가 져 옵 니 다.
 
public class Test_01 extends JFrame implements ActionListener {

	Test_01() {
		JPanel panel = new JPanel();
		JButton button1 = new JButton("   ");
		JButton button2 = new JButton("   ");

		panel.add(button1);
		panel.add(button2);
		this.getContentPane().add(panel);
		this.setVisible(true);
		
		button1.addActionListener(this);
		button2.addActionListener(this);

	}

	public void actionPerformed(ActionEvent e) {
		String source = e.getActionCommand();
		if (source.equals("   ")) {
			System.out.println("      ");
		}
		if (source.equals("   ")) {
			System.out.println("      ");
		}
	}

	public static void main(String args[]) {
		new Test_01();

	}
}

          하나의 감청 기 를 이용 하여 사건 을 처리 하 는 단점 은 사실 처리 하 는 사건 이 비교적 적 을 때 이런 방식 은 비교적 좋 은 방식 이 고 간단 하 다 는 것 이다.프로그램 이 비교적 복잡 할 때, 많은 if 문장 이 필요 하 다.프로그램의 코드 는 읽 기와 유지 보수 가 비교적 어렵다.
 
         1. 익명 내부 클래스 를 이용 하여 실현
public class Test_02 extends JFrame{
	
	Test_02(){
		JPanel panel = new JPanel();
		JButton button1 = new JButton("   ");
		JButton button2 = new JButton("   ");

		panel.add(button1);
		panel.add(button2);
		this.getContentPane().add(panel);
		this.setVisible(true);
		
		button1.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent e) {
						System.out.println("      ");
					}
				});
		button2.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent e) {
						System.out.println("      ");
					}
				});
	}
	
	public static void main(String args[]){
		new Test_02();
	}
}

          익명 내부 클래스 를 사용 하면 이벤트 원본 을 가 져 오 는 번 거 로 움 을 해결 할 수 있 습 니 다.그러나 익명 내부 클래스 를 사용 하 는 것 도 문제 가 있다.사건 팀 과 함께 있 었 기 때문이다.이벤트 그룹 이 코드 에 있 는 위치 에 따라 클래스 의 정의 와 처리 사건 도 읽 기 가 쉽 지 않 습 니 다.이벤트 처리 프로그램 이 복잡 하면 내부 클래스 의 코드 가 길 어 집 니 다.
 
 
         3. 일반 내부 류 를 이용 하여 실현
public class Test_03 extends JFrame{

	Test_03(){
		JPanel panel = new JPanel();
		JButton button1 = new JButton("   ");
		JButton button2 = new JButton("   ");

		panel.add(button1);
		panel.add(button2);
		this.getContentPane().add(panel);
		this.setVisible(true);
		
		button1.addActionListener(new Button1ActionListener());
		button2.addActionListener(new Button2ActionListener());
		
	}
	
	private class Button1ActionListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			System.out.println("      ");	
		}	
	}
	
	private class Button2ActionListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			System.out.println("      ");	
		}	
	}
	
	public static void main(String[] args) {
		new Test_03();
	}

}

          일반 내부 류 를 이용 하면 우 리 는 많은 문 제 를 해결 할 수 있다. 이 방법 은 두 번 째 방법 에서 익명 내부 류 를 사용 해서 발생 하 는 코드 혼란 을 피 할 수 있다.이 는 모든 사건 처리 방법 을 한 곳 에 집중 시 키 고 의미 있 는 이름 을 가지 기 때문에 프로그램 은 쉽게 읽 고 유지 할 수 있 습 니 다.하나의 이벤트 처리 프로그램 도 도구 모음, 메뉴 모음 등에 서 중복 사용 할 수 있다.
 
          위의 총 결 을 바탕 으로 우 리 는 일반적으로 세 번 째 방법 으로 사건 을 등록 한다.

좋은 웹페이지 즐겨찾기