프로그램을 실행하는 도중 사용자에 의해 발생하는 키보드 입력, 마우스 클릭 등의 동작
이벤트가 발생했을 때, 어떤 작업을 할 것인지 결정하는 것
이벤트 발생 시 이벤트에 대한 정보를 가진 객체
ex) 이벤트 종류, 이벤트 발생 위치(ex.마우스 좌표), 체크박스의 체크 상태
이벤트 객체에 의해서 호출되어 해당 이벤트를 처리하는 객체
→이벤트 리스너 사용 시 해당 인터페이스의 추상 메서드를 구현해야한다.
이벤트종류 | 리스너 인터페이스 | 추상메서드 | 발생 상황 |
---|---|---|---|
Action | ActionListener | void actionPerformed(ActionEvent) | Action이 발생 시 |
Key | KeyListener | void KeyPressed(KeyEvent) | 키가 눌려질 때 |
Key | KeyListener | void KeyReleased(KeyEvent) | 눌러진 키를 뗄 때 |
Key | KeyListener | void KeyTyped(KeyEvent) | 유니코드 키 입력 시 |
Mouse | MouseListener | void MousePressed(MouseEvent) | 마우스버튼이 눌릴 때 |
Mouse | MouseListener | void MouseReleased(MouseEvent) | 눌린 마우스 뗄 때 |
Mouse | MouseListener | void MouseClicked(MouseEvent) | 클릭 시 |
Mouse | MouseListener | void MouseEntered(MouseEvent) | 마우스 포인터가 컴포넌트 위에 올라올 때 |
Mouse | MouseListener | void MouseExisted(MouseEvent) | 마우스 포인터가 컴포넌트를 벗어날 때 |
class Listener1 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton button=(JButton)e.getSource();//이벤트 발생한 컴포넌트
button.setText("버튼 클릭"); //버튼 문자열 재지정
}
}
public class AddFrame2 extends JFrame{
AddFrame2(){
setTitle("JFrame");
setSize(300,300);
JButton button=new JButton("button");
JCheckBox box = new JCheckBox("checkbox");
JSlider slide = new JSlider();
JTextField tf=new JTextField("text 입력",20);
this.setLayout(new FlowLayout());
this.add(button);
this.add(box);
this.add(slide);
this.add(tf);
setVisible(true);
//내 프로그램 닫는 기능을 닫기 버튼으로 설정
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//버튼 컴포넌트에 액션이벤트 리스너 달기
button.addActionListener(new Listener1());
}
public static void main(String[] args) {
new AddFrame2();
}
}
이벤트 종류 | 리스터 인터페이스 | 추상메서드 | 발생 상황 |
---|---|---|---|
Mouse | MouseMotionListener | void mouseDragged(MouseEvent e) | 마우스가 드래그 될 때 |
Mouse | MouseMotionListener | void mouseMoved(MouseEvent e) | 마우스가 움질일 때 |
메서드 | 메서드의 활용 |
---|---|
int getX() | 현재 마우스 포인터의 X좌표 |
int getY() | 현재 마우스 포인터의 Y좌표 |
short getButton() | 현재 클릭한 버튼(왼쪽, 오른쪽) |
int getClickCount() | 마우스를 클릭한 횟수 |
public class Mouse extends JFrame {
JPanel Jp = new JPanel();
JLabel la;
Mouse(){
setTitle("mouse 이벤트창");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(Jp);
Jp.addMouseListener(new MouseListener1());
Jp.addMouseMotionListener(new MouseListener1());
la=new JLabel("마우스를 올려보세요!");
Jp.add(la);
setSize(300,300);
setVisible(true);
}
class MouseListener1 implements MouseListener, MouseMotionListener{
@Override
public void mouseDragged(MouseEvent e) {
la.setText("Mouse Dragged ("+e.getX()+","+e.getY()+")");
}
@Override
public void mouseMoved(MouseEvent e) {
la.setText("Mouse Moved ("+e.getX()+","+e.getY()+")");
}
@Override
public void mouseClicked(MouseEvent e) {
la.setText("마우스 클릭횟수:" +e.getClickCount());
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
JPanel p = (JPanel)e.getSource();
p.setBackground(Color.RED); //판의 배경을 레드로 설정
}
@Override
public void mouseExited(MouseEvent e) {
JPanel p = (JPanel)e.getSource();
p.setBackground(Color.YELLOW); //판의 배경을 옐로우로 설정
}
}
public static void main(String[] args) {
new Mouse();
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
class MenuActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "팝업"); //간단한 알림창
}
}
public class MenuTest extends JFrame {
MenuTest(){
setTitle("Menu 만들기");
createMenu();
setSize(250,200);
setVisible(true);
}
public void createMenu() {
//메뉴바 생성
JMenuBar mb = new JMenuBar();
//메뉴 생성
JMenu screenMenu = new JMenu("메뉴바1");
//메뉴에 부착할 아이템 생성
screenMenu.add(new JMenuItem("Load"));
screenMenu.add(new JMenuItem("Hide"));
screenMenu.add(new JMenuItem("ReShow"));
screenMenu.addSeparator(); //구분선
screenMenu.add(new JMenuItem("Exit"));
//메뉴아이템 객체 만들어서 메뉴에 붙이기
JMenuItem item = new JMenuItem("팝업");
item.addActionListener(new MenuActionListener());
screenMenu.add(item);
mb.add(screenMenu);
mb.add(new JMenu("편집"));
mb.add(new JMenu("실행"));
mb.add(new JMenu("도움말"));
//메뉴바를 현재 프레임의 메뉴로 지정
setJMenuBar(mb);
}
public static void main(String[] args) {
new MenuTest();
}
}