Heim >Java >javaLernprogramm >Erläuterung der GUI-Programmierung in Java (Teil 2)

Erläuterung der GUI-Programmierung in Java (Teil 2)

巴扎黑
巴扎黑Original
2017-07-23 13:47:332333Durchsuche

1. Mechanismus zum Abhören von Ereignissen

-- Ereignisquelle: die Komponenten der grafischen Benutzeroberfläche im AWT- oder Swing-Paket, d. h. die Komponente, in der das Ereignis auftritt

-- Event :Event Eine vom Benutzer an der Komponente ausgeführte Operation

-- Listener: Listener Die für die Verarbeitung des Ereignisses verantwortliche Methode

2. Klassen unter java.awt .event-Paket

WindowEvent //Fensterereignisse, z. B. wenn der Benutzer auf ein halb geschlossenes Fenster klickt, das Fenster den Fokus erhält oder verliert, maximiert oder minimiert usw.

MouseEvent //Mausereignisse, Maus gedrückt, Maus losgelassen, Klicken (Drücken und loslassen) usw.

ActionEvent //Aktionsereignis, es stellt keine bestimmte Aktion dar, sondern eine Semantik, z. B. eine Schaltfläche oder ein Menü angeklickt, Enter im Textfeld gedrückt usw., es kann so verstanden werden: Eine bestimmte Aktion des Benutzers bewirkt, dass die Grundfunktion einer bestimmten Komponente auftritt. Dies ist das ActionEvent-Ereignis

Verschiedene Ereignistypen entsprechen zu verschiedenen Ereignis-Listener-Schnittstellen und den Namen der Schnittstellen Entspricht dem Namen des Ereignisses.

WindowEvent - >WindowListener

MouseEvent ->MouseListener

ActionEvent ->ActionListener

Codebeispiel:

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}

        });
    }
}

Ist Ihnen aufgefallen, dass bei Verwendung der WindowListener-Schnittstelle viel ungewöhnlicher Code eingeführt wird (hier wollen wir ihn nur ausschalten) und die Methoden in der Entschuldigung nur überschrieben und nicht gelöscht werden können? , also Das ganze Projekt scheint sehr langwierig zu sein. Um dieses Problem zu lösen, gibt es einen Ereignisadapter.

3. Ereignisadapter

JDK definiert entsprechende Implementierungsklassen für die meisten Ereignis-Listener-Schnittstellenklassen (es gibt viele leere Implementierungsmethoden, die uns die Erstellung von Erkennungs-Listener-Objekten erleichtern). ), die wir die Ereignisadapterklasse nennen. Hier habe ich WindowAdapter verwendet.

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);
            }
        });
    }
}

Sie können den Quellcode der WindowAdapter-Klasse beobachten und ein Gefühl dafür bekommen.

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) {}
}

Lassen Sie uns einige Beispiele für Event-Handler üben.

Beispiel 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();
    }

}

Klicken Sie oben auf die Schaltfläche „Programm beenden“, um den Vorgang zu beenden, und klicken Sie oben rechts auf das X Ecke, Ausstieg ist nicht möglich. Weil es keinen WindowListener-Satz gibt.

Dieses Beispiel verwendet die ActionListener-Schnittstelle. Sie können sich den Quellcode wie folgt ansehen:

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

}

Beispiel 2:

  TextField txtNo;=  Frame("请输入密码"f.setBounds(50, 50, 400, 400);f.setLayout( FlowLayout());=  TextField(10);  code = (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)) {System.out.println(KeyEvent.getKeyText(code) + "输入有误" 0

Testklasse:

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

Beispiel 3:

Listen Sie den Inhalt der auf angegebenes Verzeichnis:

import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;public class Test24 {public static void main(String[] args) {new MyWindow();
    }
}class MyWindow {
    MyWindow() {
        init();
    }private Frame f;private Button b;private TextField txtDir;// 用来输入目录名称private TextArea txtFileList;// 用来显示文件列表private void init() {
        f = new Frame("窗口");
        f.setBounds(44, 44, 500, 500);
        f.setLayout(new FlowLayout());

        txtDir = new TextField(8);
        b = new Button("显示");
        txtFileList = new TextArea(20, 30);// 用来显示文件列表的区域f.add(txtDir);
        f.add(b);
        f.add(txtFileList);
        initEvent();
        f.setVisible(true);
    }private void initEvent() {// TODO Auto-generated method stubf.addWindowListener(new WindowAdapter() {/** * 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) {
                System.exit(0);
            }
        });
        b.addActionListener(new ActionListener() {/** * Invoked when an action occurs.             */public void actionPerformed(ActionEvent e) {
                txtFileList.setText("");
                String dirStr = txtDir.getText();// 取出用户输入的路径File file = new File(dirStr);if (file.isDirectory() && file.exists()) {
                    String[] fileNameList = file.list();for (String s : fileNameList) {
                        txtFileList.append(s + "\r\n");// 别忘了换行符                    }
                } else {
                    txtFileList.append("输入有误,请重新输入");
                }
            }
        });

    }
}

Ergebnis: (Ich habe darum gebeten, das Verzeichnis meines Laufwerks D anzuzeigen)

Das obige ist der detaillierte Inhalt vonErläuterung der GUI-Programmierung in Java (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn