티스토리 뷰

 

1.버튼을 클릭 --> 2.이벤트 객체가 발생 --> 3.이벤트 처리

 

 

 

 

이벤트 리스너 작성 과정

 

 

위의 경우는 클래스로 독립시켰지만, this를 사용해서 내부에서 바로 리스너를 만들 수도 있다.

 

ActionEvent e <--e에 이벤트가 발생한 컴포넌트 속성, 여기선 버튼의속성이 넘어간다.

 

 

위와 아래의 button은 다른 인스턴스임  위의 button에 아래의 button을 대입, 그 속성을 바꾸면 원래의 속성이 바뀜 인스턴스는 포인터처럼 원래의 값을 가리키고 있기 떄문

 

사용하는 방법은 여러가지가 있다.

 

 

다른클래스로 사용하기

 

package lect1111;

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

import javax.swing.JButton;
import javax.swing.JFrame;


class MyListener implements ActionListener {
int i =0;
	public void actionPerformed(ActionEvent e) {
		JButton button = (JButton) e.getSource();
		if(i == 0)
		{
			button.setText("버튼이 눌렸습니다.");
			i=i+1;
		}
		
		else
		{
			button.setText("test1");
			i=0;
		}
			
	}
	
}

public class Event_1 extends JFrame {

	public Event_1() {
		
		this.setTitle("Event Test");
		this.setSize(400,400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton btn1 = new JButton("test1");
		btn1.addActionListener(new MyListener());
		this.add(btn1);
		this.setVisible(true);
	}
	
	
	public static void main(String[] args) {
		
		Event_1 a = new Event_1();
	}
	
	
}

 

내부 클래스로 사용

package lect1111;

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

import javax.swing.JButton;
import javax.swing.JFrame;

public class InerEvent_1 extends JFrame {

	JButton btn1;
	
	public InerEvent_1() {
		this.setTitle("Event Test");
		this.setSize(400,400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		btn1 = new JButton("test1");
		btn1.addActionListener(new MyListener_1());
		this.add(btn1);
		this.setVisible(true);
	}
	
	class MyListener_1 implements ActionListener {
		
		public void actionPerformed(ActionEvent e) {
			
			if(e.getSource()==btn1)
				btn1.setText("event call");
		}
		
		
	}
	


	
	public static void main(String[] args) {
		
		InerEvent_1 a = new InerEvent_1();
	}
	
}

 

함수로 사용하기

 

package lect1111;

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

import javax.swing.JButton;
import javax.swing.JFrame;

public class FucEvent_1 extends JFrame implements ActionListener {

	JButton btn1;
	JButton btn2;
	JButton btn3;
	
	public FucEvent_1()
	{
		
		this.setTitle("Event Test");
		this.setSize(400,400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(new FlowLayout());
		 btn1 = new JButton("test1");
		btn1.addActionListener(this);
		this.add(btn1);
		btn2 = new JButton("test2");
		btn2.addActionListener(this);
		this.add(btn2);
		btn3 = new JButton("돌려놓기");
		btn3.addActionListener(this);
		this.add(btn3);
		this.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if ( e.getSource()==btn1)
			btn1.setText("event call");
		else if (e.getSource() == btn2)
			btn2.setText("event call 2");
		else if (e.getSource()==btn3)
		{
			btn1.setText("test1");
			btn2.setText("test2");
		}
	}
	
	
	public static void main(String[] args) {
		
		FucEvent_1 a = new FucEvent_1();
	}
	
	
}

 

 

무명클래스로 사용하기

package lect1111;

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Event_2 extends JFrame {
	JButton btn1;
	JButton btn2;
	JButton btn3;
	JLabel result;
	public Event_2()
	{
		
		this.setTitle("Event Test");
		this.setSize(400,400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(new FlowLayout());
		 btn1 = new JButton("test1");
		btn1.addActionListener(new ActionListener() {
			
		public void actionPerformed(ActionEvent e) {
			if(e.getSource() == btn1)
			{
			result.setText("event call1");
			}
		}
		});
		
		this.add(btn1);

		this.setVisible(true);
		
		
	}
	

}

 

이런식으로 버튼에 이벤트를 설정해 줄 수 있다.

댓글
최근에 올라온 글
최근에 달린 댓글
250x250