dポイントプレゼントキャンペーン実施中!

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

A 回答 (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();
}
}
    • good
    • 0
この回答へのお礼

こういうのがやりたかったんです!
返信ありがとうございます

お礼日時:2013/02/21 11:37

これ、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してください。
    • good
    • 0
この回答へのお礼

返信ありがとうございます
私は、このメニューが表示されるのを避けたプログラムが組みたかったのですが、それは出来ないということでしょうか?

お礼日時:2013/02/21 01:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!