ホームページ 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 <= KeyEvent.VK_9)) {System.out.println(KeyEvent.getKeyText(code) + "输入有误" 0
ログイン後にコピー
テスト クラス:

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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Oct 11, 2024 pm 08:58 PM

Python は、問題解決の初心者に力を与えます。ユーザーフレンドリーな構文、広範なライブラリ、変数、条件文、ループによる効率的なコード開発などの機能を備えています。データの管理からプログラム フローの制御、反復的なタスクの実行まで、Python が提供します

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

コーディングの鍵: 初心者のための Python の力を解き放つ コーディングの鍵: 初心者のための Python の力を解き放つ Oct 11, 2024 pm 12:17 PM

Python は、学習の容易さと強力な機能により、初心者にとって理想的なプログラミング入門言語です。その基本は次のとおりです。 変数: データ (数値、文字列、リストなど) を保存するために使用されます。データ型: 変数内のデータの型 (整数、浮動小数点など) を定義します。演算子: 数学的な演算と比較に使用されます。制御フロー: コード実行のフロー (条件文、ループ) を制御します。

C の謎を解く: 新人プログラマーのための明確でシンプルな道 C の謎を解く: 新人プログラマーのための明確でシンプルな道 Oct 11, 2024 pm 10:47 PM

C は、初心者がシステム プログラミングを学習するのに最適な選択肢です。ヘッダー ファイル、関数、メイン関数のコンポーネントが含まれています。 「HelloWorld」を印刷できる単純な C プログラムには、標準入出力関数宣言を含むヘッダー ファイルが必要で、main 関数で printf 関数を使用して印刷します。 C プログラムは、GCC コンパイラーを使用してコンパイルして実行できます。基本をマスターしたら、データ型、関数、配列、ファイル処理などのトピックに進み、熟練した C プログラマーになることができます。

内なるプログラマーを解き放つ: まったくの初心者のための C 内なるプログラマーを解き放つ: まったくの初心者のための C Oct 11, 2024 pm 03:50 PM

C は初心者がプログラミングを学ぶのに理想的な言語であり、効率性、汎用性、移植性などの利点があります。 C 言語の学習には次のことが必要です。 C コンパイラ (MinGW や Cygwin など) をインストールする 変数、データ型、条件文、ループ文を理解する main 関数と printf() 関数を含む最初のプログラムを作成する 実際のケースによる練習 (平均値の計算など) C言語の知識

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Feb 07, 2025 pm 12:11 PM

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles