検索
ホームページJava&#&チュートリアルJavaによるGUIプログラミングの解説(後編)

JavaによるGUIプログラミングの解説(後編)

Jul 23, 2017 pm 01:47 PM
javaベースプログラミング

1. イベントリスニングメカニズム

-- イベントソース: awt または Swing パッケージ内のグラフィカルインターフェイスコンポーネント、つまりイベントが発生するコンポーネント

-- イベント: コンポーネントに対するユーザーの操作

-- Listener :イベントの処理を担当するリスナーメソッド

2. java.awt.event パッケージの下のクラス

WindowEvent //ユーザーが半分閉じたウィンドウをクリックしたり、ウィンドウが開いたり、フォーカスの喪失、最大化または最小化など。

MouseEvent //マウスイベント、マウスプレス、マウスリリース、クリック(プレスアンドリリース)など。

ActionEvent //アクションイベント、特定のアクションを表すのではなく、ボタンなどのセマンティック、またはメニューがクリックされたとき、テキスト ボックスで 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が設定されていないため。

この例では ActionListener インターフェイスを使用しています。次のようにソース コードを確認できます:

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

}
例 2:

  TextField txtNo;=  Frame("请输入密码"f.setBounds(50, 50, 400, 400);f.setLayout( FlowLayout());=  TextField(10);  code = (!(code >= KeyEvent.VK_0 && code <div class="cnblogs_code">テスト クラス: </div><p></p><pre class="brush:php;toolbar:false">public class Test23 {public static void main(String[] args) {new TestFrame();
    }
}

例 3:

指定されたディレクトリの内容をリストします:

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("输入有误,请重新输入");
                }
            }
        });

    }
}
結果: (Dドライブのディレクトリを表示するように依頼しました)

以上がJavaによるGUIプログラミングの解説(後編)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール