ActionListener 인터페이스


1) getActionCommand() : 발생과 관련있는 이름 반환
2) getModifiers() : 액션이벤트발생시 Shift,Ctrl이 눌렸는지 알린다.
3) paramString() : 발생한 이벤트와 관련있는 정보를 문자열로 반환
* 한개의 메소드만 있기 때문에 어댑터클래스가 필요없다.
구현 예)
http://cotoba.tistory.com/115
- 모든 메소드는 java.awt.Event 로부터 전달된 객체를 받는다.
- JVM은 전달받은 하드웨어 이벤트로부터 Event객체를 생성한다.
- 전달받은 이벤트를 해석하고 프로그래머가 쉽게 다룰수 있도록하기위해 객체로 변환한다.
▼ 컴포넌트가 발생시킬 수 있는 이벤트와 해당 이벤트를 처리하는 이벤트 행들링 코드를 결합하기 위해 필요한 기본 절차를 보여준다.
이벤트리스닝을 변경하는 방법
- 그 자신이 이벤트 리스너인 단일 클래스를 만든다.
- 스스로 리스너 인터페이스를 구현하는 클래스를 만든다.
- 그 자신이 이벤트 처리 클래스라는 표시로 this매개변수를 전달하여 addActionListener()를 호출한다.
- 이벤트의 발생과 처리가 한 클래스 안에서 이루어진다.
- 자바는 컴포넌트 크기와 레이아웃을 만들기 위해 프로그래머가 메소드를 호출하는 것 대신에 레이아웃 관리자를 제공한다.
- 레이아웃 관리자는 각 객체가 화면에 출력될 위치에 관여할수 있지만 정확한 좌표를 지정할수는 없다.
└ 브라우저에 기반한 GUI를 구성하기 때문에
└ GUI가 인터넷으로 전송되고 브라우저에서 실행된다면
화면 해상도, 크기 또는 그것을 실행할 브라우저의 종류에 구애받지 않는다.
└ 메소드 호출과 switch문으로 처리하기 어려우므로 간단하게 하기 위해
(자바 디자이너들은) 레이아웃관리자를 제공하여
(관리자 하나, 혹은 조합으로) 사용자가 원하는 모양을 만들수 있도록 지원한다.
- java.awt패키지에 의해 제공되는 레이아웃 관리자는 스윙에서도 사용할 수 있다.
└ 스윙 애플리케이션은 모든 레이아웃 관리자를 사용할 수 있다.
1. BorderLayout
Panel객체를 생성하고 거기에 GUI객체를 추가한다.
레이아웃 방법에 따라 일정한 영역에 패널을 위치시킨다.
패널은 한 개의 영역에서 시작하여 다른 영역에서 끝나도록 다른 색으로 지정할 수 있다.
BorderLayout클래스는 각 영역의 크기를 자체적으로 정한다.
사용자는 간접적인 영향만 미친다.
2. FlowLayout
- 레이아웃 관리자중 가장 간단하다.
- 컴포넌트가 프레임에 놓일때 왼쪽을 기준으로 위치한다.
- 컴포넌트는 계속 이어지면서 위치하게 되고 해당 행에 출력되지 못하면 새로운 행을 만들어 출력한다.
3. GridBagLayout
- 가장 강력하지만 레이아웃 관리자를 구현하는데 가장 복잡하다.
- 다른 행과 열에 항목을 위치시키는 스프레드시트 프로그램처럼 동작하고
또 다르게 셀의 크기를 다르게 지정할수 있다.
- 레이아웃 관리자의 복잡함을 처리하기 위한 클래스 GridBagConstraints를 호출한다.
└ 프로그래머가 좌표, 범위, 스페이싱, 패딩을 지정할수 있게 해준다.
- 프레임에 놓인 모든 객체는 강제적으로 지정할 필요가 있다.
- 이 클래스는 레이아웃을 보다 정밀하게 제어하여 셀에 객체를 위치시킬수 있다.
- 어떤 이유로 높은 행과 열 번호를 지정해도 결과에서 행, 열에 공백이 없다.
└ 만약 행, 열이 비어있다면 레이아웃 관리자에 의해 무시된다.
Menu에서 항목을 표현한다.
선택되면 이벤트를 발생시킨다.
enable()/disable() 메소드로 사용가능/불가능으로 지정가능하다.
import java.awt.*;
import java.awt.event.*;
public class TestMenuItems extends Frame implements ActionListener {
MenuBar mBar;
Menu breadMenu, toastMenu;
Menu helpMenu;
TextField tField;
public TestMenuItems() {
breadMenu = new Menu("Bread");
MenuItem tempMenuItem;
tempMenuItem = new MenuItem("White");
tempMenuItem.addActionListener(this);
breadMenu.add(tempMenuItem);
tempMenuItem = new MenuItem("Wheat");
tempMenuItem.addActionListener(this);
breadMenu.add(tempMenuItem);
tempMenuItem = new MenuItem("Rye");
tempMenuItem.addActionListener(this);
breadMenu.add(tempMenuItem);
toastMenu = new Menu("Toast");
tempMenuItem = new MenuItem("Light");
tempMenuItem.addActionListener(this);
toastMenu.add(tempMenuItem);
tempMenuItem = new MenuItem("Medium");
tempMenuItem.addActionListener(this);
toastMenu.add(tempMenuItem);
tempMenuItem = new MenuItem("Dark");
tempMenuItem.addActionListener(this);
toastMenu.add(tempMenuItem);
mBar = new MenuBar();
mBar.add(breadMenu);
mBar.add(toastMenu);
helpMenu = new Menu("Help");
helpMenu.add(new MenuItem("help"));
mBar.setHelpMenu(helpMenu);
tField = new TextField(" ", 30);
setLayout(new FlowLayout());
add(tField);
setMenuBar(mBar);
addWindowListener(new WinCloser());
setTitle("Using Menu Bars");
setBounds(100,100,300,300);
setVisible(true);
}
public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand(); //어떤항목이 사용자에게 선택되었는지 알수있다
tField.setText("You selected : " + cmd);
}
public static void main(String[] args) {
TestMenuItems tmi = new TestMenuItems();
}
}
class WinCloser extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}