>  기사  >  Java  >  Java의 GUI 프로그래밍 설명(2부)

Java의 GUI 프로그래밍 설명(2부)

巴扎黑
巴扎黑원래의
2017-07-23 13:47:332316검색

1. 이벤트 수신 메커니즘

-- 이벤트 소스: awt 또는 Swing 패키지의 그래픽 인터페이스 구성 요소, 즉 이벤트가 발생하는 구성 요소

-- 이벤트: 이벤트 구성 요소에 대한 사용자의 작업

-- 리스너 이벤트 처리를 담당하는 리스너 메소드

2. java.awt.event 패키지 아래 클래스

WindowEvent //사용자가 반쯤 닫힌 창을 클릭하거나 창이 획득되거나 획득되는 등의 창 이벤트 포커스 상실, 최대화 또는 최소화 등

MouseEvent //마우스 이벤트, 마우스 누르기, 마우스 떼기, 클릭(눌렀다 떼기) 등

ActionEvent //Action 이벤트, 특정 동작을 나타내지는 않지만, 버튼과 같은 의미, 메뉴를 클릭할 때, 텍스트 상자에서 Enter를 누를 때 등은 다음과 같이 이해할 수 있습니다. 사용자의 특정 작업으로 인해 특정 구성 요소 자체의 기본 기능이 발생합니다. 이는 ActionEvent 이벤트입니다. 다양한 이벤트 유형은 다양한 이벤트 리스너 인터페이스에 해당하며 인터페이스 이름은 이벤트 이름에 해당합니다.

WindowEvent - >WindowListener

MouseEvent ->MouseListener

ActionEvent ->ActionListener

코드 예:

import java.awt.Frame;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;public class Test20 {public static void main(String[] args) {
        Frame f = new Frame();
        f.setSize(400, 400);
        f.setVisible(true);

        f.addWindowListener(new WindowListener() {

            @Overridepublic void windowOpened(WindowEvent e) { // 窗口被打开// TODO Auto-generated method stub}

            @Overridepublic void windowClosing(WindowEvent e) { // 设置关闭事件// TODO Auto-generated method stubSystem.exit(0);
            }

            @Overridepublic void windowClosed(WindowEvent e) { // 用户已经关闭窗口// TODO Auto-generated method stub}

            @Overridepublic void windowIconified(WindowEvent e) { // 被最小化的时候// TODO Auto-generated method stub}

            @Overridepublic void windowDeiconified(WindowEvent e) { // 最小化被还原的时候// TODO Auto-generated method stub}

            @Overridepublic void windowActivated(WindowEvent e) { // 窗体被激活// TODO Auto-generated method stub}

            @Overridepublic void windowDeactivated(WindowEvent e) { // 失去焦点的时候// TODO Auto-generated method stub}

        });
    }
}
WindowListener 인터페이스를 사용할 때 일반적이지 않은 코드가 많이 도입된다는 사실을 알고 계셨나요? (여기서 우리는 그것을 설정하고 싶습니다.) 변명에 있는 메소드는 덮어쓰기만 가능하고 삭제할 수 없습니다. 이로 인해 전체 프로젝트가 매우 장황해 보입니다. 이 문제를 해결하기 위해 이벤트 어댑터가 있습니다.

3. 이벤트 어댑터

JDK는 이벤트 어댑터 클래스라고 부르는 대부분의 이벤트 리스너 인터페이스 클래스에 해당하는 구현 클래스를 정의합니다(리스너 객체 생성을 용이하게 하기 위해 빈 구현 메서드가 많이 있습니다). 여기서는 WindowAdapter를 사용했습니다.

import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class Test21 {public static void main(String[] args) {
        Frame f = new Frame("事件适配器的栗子");
        f.setSize(400, 400);
        f.setVisible(true);

        f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

WindowAdapter 클래스의 소스코드를 관찰하고 감을 느껴보실 수 있습니다.

public abstract class WindowAdapterimplements WindowListener, WindowStateListener, WindowFocusListener
{/** * Invoked when a window has been opened.     */public void windowOpened(WindowEvent e) {}/** * Invoked when a window is in the process of being closed.
     * The close operation can be overridden at this point.     */public void windowClosing(WindowEvent e) {}/** * Invoked when a window has been closed.     */public void windowClosed(WindowEvent e) {}/** * Invoked when a window is iconified.     */public void windowIconified(WindowEvent e) {}/** * Invoked when a window is de-iconified.     */public void windowDeiconified(WindowEvent e) {}/** * Invoked when a window is activated.     */public void windowActivated(WindowEvent e) {}/** * Invoked when a window is de-activated.     */public void windowDeactivated(WindowEvent e) {}/** * Invoked when a window state is changed.
     * @since 1.4     */public void windowStateChanged(WindowEvent e) {}/** * Invoked when the Window is set to be the focused Window, which means
     * that the Window, or one of its subcomponents, will receive keyboard
     * events.
     *
     * @since 1.4     */public void windowGainedFocus(WindowEvent e) {}/** * Invoked when the Window is no longer the focused Window, which means
     * that keyboard events will no longer be delivered to the Window or any of
     * its subcomponents.
     *
     * @since 1.4     */public void windowLostFocus(WindowEvent e) {}
}
이벤트 핸들러의 몇 가지 예를 연습해 보세요.

예시 1:

import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;//例一:在窗体中放置一个按纽,点击后让程序退出class TestFrame implements ActionListener { // ActionListener接口里面只有一个方法,下面会重写private Frame f;public TestFrame() {
        f = new Frame("窗口");
        init();
    }private void init() {
        f.setSize(300, 300);
        f.setLayout(new FlowLayout());// 布局模式Button b = new Button("退出程序");
        b.addActionListener(this);
        f.add(b);
        f.setVisible(true);

    }

    @Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubf.setVisible(false);
        f.dispose();// 在关闭的时候,可以用它来销毁窗体资源System.exit(0);// 退出    }

}public class Test22 {public static void main(String[] args) {new TestFrame();
    }

}

위에서 프로그램 종료 버튼을 클릭하면 오른쪽 상단의 X를 클릭하지만 종료할 수 없습니다. WindowListener가 설정되지 않았기 때문입니다. this 예제는 ActionListener 인터페이스를 사용하고 다음과 같이 소스 코드를 살펴볼 수 있습니다.

지정된 디렉터리의 목록 내용:

public interface ActionListener extends EventListener {/** * Invoked when an action occurs.     */public void actionPerformed(ActionEvent e);

}

결과: (내 D 드라이브의 디렉터리를 표시하도록 요청했습니다)

위 내용은 Java의 GUI 프로그래밍 설명(2부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.