ホームページ Java &#&チュートリアル Java を使用したグラフィカル メニューの作成に関するチュートリアル

Java を使用したグラフィカル メニューの作成に関するチュートリアル

Jan 17, 2017 am 11:34 AM

メニューには、ドロップダウン メニューとポップアップ メニューの 2 種類があります。この章では、ドロップダウン メニューのプログラミング方法についてのみ説明します。メニューは、インターフェイスに常に表示されるという点で、JComboBox や JCheckBox とは異なります。このメニューは、一度に 1 つの項目のみを選択できるという点で JComboBox に似ています。

ドロップダウン メニューまたはポップアップ メニューでオプションを選択すると、ActionEvent イベントが生成されます。イベントはそのオプションのモニターに送信され、イベントの意味がモニターによって解釈されます。
メニュー バー、メニュー、およびメニュー項目

ドロップダウン メニューは、メニュー バーに表示される名前によって視覚的に表されます。メニュー バー (JMenuBar) は、通常、JFrame の上部に表示されます。複数のドロップダウン メニュー。ドロップダウン メニューをアクティブにするには 2 つの方法があります。 1 つは、マウス ボタンを押したままにし、マウスを放して選択を完了するまでマウスを移動することです。もう 1 つの方法は、カーソルがメニュー バーのメニュー名の上にあるときにマウスをクリックすることです。この場合、メニューが展開され、メニュー項目が強調表示されます。

メニュー バーには複数のメニュー (JMenu) を含めることができ、各メニューには多数のメニュー項目 (JMenuItem) を含めることができます。例えば、Eclipse環境のメニューバーには、File、Edit、Source、Refactorなどのメニューがあり、それぞれのメニューには多数のメニュー項目があります。たとえば、[ファイル] メニューには、[新規作成]、[ファイルを開く]、[閉じる]、[すべて閉じる] などのメニュー項目があります。

ウィンドウにメニューを追加する方法は、まずメニュー バー オブジェクトを作成し、次にいくつかのメニュー オブジェクトを作成し、これらのメニュー オブジェクトをメニュー バーに配置し、必要に応じて各メニュー オブジェクトにメニュー項目を追加します。
メニュー内のメニュー項目を完全なメニューにすることもできます。メニュー項目は別の完全なメニューになる可能性があるため、階層的なメニュー構造を構築できます。

1. メニュー バー
クラス JMenuBar のインスタンスはメニュー バーです。たとえば、次のコードはメニュー バー オブジェクト menubar を作成します。

JMenuBar menubar = new JMenuBar();
ログイン後にコピー

メニュー バーをウィンドウに追加するには、JFrame クラスの setJMenuBar() メソッドを使用する必要があります。たとえば、コード:

setJMenuBar(menubar);
ログイン後にコピー

クラス JMenuBar の一般的なメソッドは次のとおりです:

add(JMenu m): メニュー m をメニュー バーに追加します。

countJMenus(): メニューバーのメニュー項目の数を取得します。

getJMenu(int p): メニューバーのメニューを取得します。

remove(JMenu m): メニューバーのメニュー m を削除します。

2. メニュー
JMenu クラスによって作成されるオブジェクトがメニューです。 JMenu クラスの一般的に使用されるメソッドは次のとおりです:

JMenu(): 空のタイトルを持つメニューを作成します。

JMenu(String s): s というタイトルのメニューを作成します。

add(JMenuItem item): パラメーター item で指定されたメニュー オプションをメニューに追加します。

add(JMenu menu): パラメータメニューで指定されたメニューをメニューに追加します。メニューに埋め込みサブメニューを実装します。

addSeparator(): メニューオプションの間に区切り線を描きます。

getItem(int n): 指定されたインデックスにあるメニュー項目を取得します。

getItemCount(): メニュー項目の数を取得します。

insert(JMenuItem item, int n): メニュー位置 n にメニュー項目を挿入します。

remove(int n): メニュー位置 n にあるメニュー項目を削除します。

removeAll(): メニューのすべてのメニュー項目を削除します。

3. メニュー項目
JMenuItem クラスのインスタンスはメニュー項目です。クラス JMenuItem の一般的なメソッドは次のとおりです:

JMenuItem(): 無題のメニュー項目を構築します。

JMenuItem(String s): タイトル付きのメニュー項目を構築します。

setEnabled(boolean b): 現在の単一項目を選択できるかどうかを設定します。

isEnabled(): 現在のメニュー項目がユーザーによって選択可能かどうかを返します。

getLabel(): メニュー項目の名前を取得します。

setLabel(): メニューオプションの名前を設定します。

addActionListener(ActionListener e): メニュー項目のモニターを設定します。モニターは、メニューがクリックされたときにアクション イベントを受け取ります。

4. メニュー イベントの処理
メニューのイベント ソースは、マウスでメニュー項目をクリックすることです。このイベントを処理するインターフェースはActionListener、実装するインターフェースメソッドはactionPerformed(ActionEvent e)、イベントソースを取得するメソッドはgetSource()です。

【例】ウィンドウにはメニューバーがあります。ボタンが開いているウィンドウの状態では、ボタンをクリックするとウィンドウが開き、2 つのメニューがあり、各メニューには 3 つのメニュー項目があります。メニュー項目が選択されると、メニュー項目監視メソッドは、対応するメニュー項目が選択されたことをテキスト ボックスに表示します。

import java.applet.*
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MenuWindow extends JFrame implements ActionListener{
  public static JtextField text;
  private void addItem(JMenu Menu,String menuName,ActionListener listener){
    JMenuItem anItem = new JMenuItem(menuName);
    anItem.setActionCommand(menuName);
    anItem.addActionListener(listener);
    Menu.add(anItem);
  }
  public MenuWindow(String s,int w,int h){
    setTitle(s);
    Container con = this.getContentPane();
    con.setLayout(new BorderLayout());
    this.setLocation(100,100);
    this.setSize(w,h);
    JMenu menu1 = new JMenu("体育");
    addItem(menu1," 跑步",this);
    addItem(menu1," 跳绳",this);
    addItem(menu1,"打球",this);
    JMenu menu2 = JMenu("娱乐");
    addItem(menu2,"唱歌",this);
    addItem(menu2,"跳舞",this);
    addItem(menu2,"游戏",this);
    JMenuBar menubar = new JMenuBar();
    text = new JTextField();
    menubar.add(menu1);
    menubar.add(menu2);
    setJMenuBar(MenuBar);
    con.add(text,BorderLayout.NORTH);
  }
  public void actionPerformed(ActionEvent e){
    text.setText(e.getActionCommand()+"菜单项被选中!");
  }
}
public class Example6_5 extends Applet implements ActionListener{
  MenuWindow window;
  JButton button;
  boolean bflg;
  public void init(){
    button = new JButton("打开我的体育娱乐之窗");bflg =true;
    window = new MenuWindow("体育娱乐之窗",100,100);
    button.addActionListener(this);
    add(button);
  }
  public void actionPerformed(ActionEvent e){
    if(e.getSource()==button){
      if(bflg){
        window.setVisible(true);
        bflg = false;
        button.setLabel("关闭我的体育娱乐之窗");
      }
      else{
        window.setVisible(false);
        bflg = true;
        button.setLabel("打开我的体育娱乐之窗");
      }
    }
  }
}
ログイン後にコピー



5. Embed submenu
はメニューを作成し、複数のメニュー項目を作成します。そのうちの 1 つはメニュー (他のメニュー項目を含む) であり、メニューのネストを構成します。たとえば、上記のプログラムの関連コードを次のように変更します。

Menu menu1,menu2,item4;
MenuItem item3,item5,item6,item41,item42;
ログイン後にコピー

次のコードを挿入して item41 および item42 メニュー項目を作成し、それらを item4 メニューに追加します。

item41= new MenuItem(“东方红”);
item42 = new MenuItem(“牡丹”);
item4.add(item41);
item4.add(item42);
ログイン後にコピー

item4 メニューをクリックすると、さらに 2 つメニュー項目が開き、選択できます。

6. メニューに終了項目を追加します。 新しいメニュー項目を追加し、メニュー項目がクリックされたときに Java 実行環境を終了するには、対応する監視メソッドの System.exit() メソッドを使用します。 。たとえば、次の回路図コード:

…
 
item7 = new MenuItem(“退出”);
item7.addActionListener(this);
…
public void actionPerformed(ActionEvent e){
if(e.getSource()==item7){
System.exit(0);
}
}
ログイン後にコピー

7.设置菜单项的快捷键
用MenuShortcut类为菜单项设置快捷键。构造方法是MenuShortcut(int key)。其中key可以取值KeyEvent.VK_A至KenEvent.VK_Z,也可以取 ‘a'到 ‘z'键码值。菜单项使用setShortcut(MenuShortcut k)方法来设置快捷键。例如,以下代码设置字母e为快捷键。

class Herwindow extends Frame implements ActionListener{
  MenuBar menbar;
  Menu menu;
  MenuItem item;
  MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_E);
  …
  item.setShortcut(shortcut);
  …
}
ログイン後にコピー


选择框菜单项

菜单也可以包含具有持久的选择状态的选项,这种特殊的菜单可由JCheckBoxMenuItem类来定义。JCheckBoxMenuItem对象像选择框一样,能表示一个选项被选中与否,也可以作为一个菜单项加到下拉菜单中。点击JCheckBoxMenuItem菜单时,就会在它的左边出现打勾符号或清除打勾符号。例如,在例6.5程序的类MenuWindow中,将代码

addItem(menu1,“跑步”,this);addItem(menu1,”跳绳”,this);
ログイン後にコピー

改写成以下代码,就将两个普通菜单项“跑步“和“跳绳”改成两个选择框菜单项:

JCheckBoxMenuItem item1 = new JCheckBoxMenuItem(“跑步”);
JCheckBoxMenuItem item2 = new JCheckBoxMenuItem(“跳绳”);
item1.setActionCommand(“跑步”);
item1.addActionListener(this);
menu1.add(item1);
item2.setActionCommand(“跳绳”);
item2.addActionListener(this);
menu1.add(item2);
ログイン後にコピー


更多使用Java编写图形化的菜单的教程相关文章请关注PHP中文网!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

名前を数字に変換してグループ内でソートを実装する方法は? 名前を数字に変換してグループ内でソートを実装する方法は? Apr 19, 2025 pm 01:57 PM

名前を数字に変換してグループ内でソートを実装する方法は?ユーザーをグループでソートする場合、ユーザーの名前を数字に変換して、異なる可能性があることがよくあります...

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

See all articles