
javaで、メニューバーの項目を選んだら動作するプログラムを試しに組んでみようとしたのですがうまくいきません。
どう組めばいいか教えてください。
メニューバーの項目を選んだあとに出てくるメニューを選ぶと動作するプログラムは検索してすぐ出てくるのですが…。
下のプログラムはメニューバーのEndを押すと終了する、にならなかったプログラムです。
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
class Test1 extends JFrame{
public static void main(String args[]){
Test1 frame = new Test1("タイトル");
frame.setVisible(true);
}
Test1(String title){
setTitle(title);
setBounds(100, 100, 300, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menubar = new JMenuBar();
JMenu menu1 = new JMenu("End");
menu1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
menubar.add(menu1);
setJMenuBar(menubar);
Container contentPane = getContentPane();
}
}
No.2ベストアンサー
- 回答日時:
>私は、このメニューが表示されるのを避けたプログラムが組みたかったのですが、それは出来ないということでしょうか?
はい。JMenuを利用する限りはできません。一般のアプリケーションのメニューバーを考えてみればわかると思いますが、メニューは基本的にメニュー項目を選んで操作するものであり、メニューバーに表示されているメニューをクリックして操作するというのはインターフェイスから逸脱しています。
どうしてもということでしたら、JMenuを継承したサブクラスを定義し、その中で無理やりクリックイベントを処理できるようにするしかありませんが……。下は一応動きますが、正直、おすすめしないやり方です。
import java.awt.Container;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
class Test1 extends JFrame{
public static void main(String args[]){
Test1 frame = new Test1("タイトル");
frame.setVisible(true);
}
Test1(String title){
setTitle(title);
setBounds(100, 100, 300, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menubar = new JMenuBar();
JMenu menu1 = new JMenu("End"){
@Override
protected void processMouseEvent(MouseEvent e){
if (e.getID() == MouseEvent.MOUSE_CLICKED){
System.exit(0);
}
}
};
menubar.add(menu1);
setJMenuBar(menubar);
Container contentPane = getContentPane();
}
}
No.1
- 回答日時:
これ、JMenuにActionListenerを追加していますよね?
JMenuは、メニューバーに表示されるメニューで、これにアクションは追加できません。JMenuの中にJMenuItemを追加し、このJMenuItemにイベントを追加する必要があります。
JMenuItem item1 = new JMenuItem("Quit");
menu1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
menu1.add(item1);
こんな感じでmenu1にJMenuItemインスタンスをaddして、こちらにaddActionListenerしてください。
返信ありがとうございます
私は、このメニューが表示されるのを避けたプログラムが組みたかったのですが、それは出来ないということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
どうしてもプログラムが動いて...
-
JTableでスクロールバーが表示...
-
HTMLでのTableタグデータ取得方法
-
JTextAreaのサイズについて
-
文字列を数式に
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
JavaScriptの変数をjavaのメソ...
-
ORA-01858: 数値を指定する箇所...
-
VBAで配列の計算
-
javaで質問です。 文字列2023/2...
-
JScrollPaneで、表示がおかしく...
-
JavaScriptを使ってロト6の当...
-
streamで送信されたArrayListを...
-
JavaScriptとVBScriptに関して
-
IF関数でEmpty値を設定する方法。
-
動的配列が存在(要素が有る)か...
-
ループ処理の際、最後だけ","を...
-
オブジェクトの中のプロパティ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
ColabでのPytorchのエラー
-
<forEach> 内で供給された "ite...
-
「例外 *** は対応する try 文...
-
Selenium IDEでexportしたコー...
-
javaでアプレットの描画が出来ない
-
データの外挿について
-
ActionForm form にnullが入っ...
-
(急募)一覧表画面でパスワード...
-
(急募)一覧画面表示がうまくい...
-
(急募)「.csv」ファイルをテー...
-
Java での グローバルIP取得
-
シャットダウンフックが呼ばれない
-
GridBagLayoutについての質問
-
文字列を数式に
-
生年月日と今日の日付から年齢...
-
JTableでスクロールバーが表示...
-
干支の計算で。。。
-
Javaを使ってデジタル時計を作...
-
JAVA 乱数で同じ数字を出さな...
おすすめ情報