web-dev-qa-db-ja.com

JMenuアイテムがクリックされたときに何かを実行させる方法

私はJmenuを持つGUIを作成しています。クリックされたときに実行されるjmenuアイテムがあります。それは問題。私は見ましたが、クリックしたときに何かを実行する方法を見つけることができません。また、私は初心者なので、非常に単純な方法でそれを行うことができればそれは素晴らしいことです!

これがコードです:

import Java.awt.Color;
import Java.awt.Component;
import javax.swing.*;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
import Java.awt.event.KeyEvent;
import javax.swing.*;

public abstract class windowMaker extends JFrame implements ActionListener {
private JMenu menuFile;

public static void main(String[] args) {
    createWindow();

}

public static void createWindow() {
    JFrame frame = new JFrame();
    frame.setTitle("*Game Title* Beta 0.0.1");
    frame.setSize(600, 400);
    frame.setLocation(100, 100);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setJMenuBar(windowMaker.menuBarCreator());
    frame.add(windowMaker.setTitle());
}

public static void launchURL(String s) {
    String s1 = System.getProperty("os.name");
    try {

        if (s1.startsWith("Windows")) {
            Runtime.getRuntime()
                    .exec((new StringBuilder())
                            .append("rundll32   url.dll,FileProtocolHandler ")
                            .append(s).toString());
        } else {
            String as[] = { "firefox", "opera", "konqueror",   "epiphany",
                    "mozilla", "netscape" };
            String s2 = null;
            for (int i = 0; i < as.length && s2 == null; i++)
                if (Runtime.getRuntime()
                        .exec(new String[] { "which", as[i]   }).waitFor() == 0)
                    s2 = as[i];

            if (s2 == null)
                throw new Exception("Could not find web browser");
            Runtime.getRuntime().exec(new String[] { s2, s });
        }
    } catch (Exception exception) {
        System.out
                .println("An error occured while trying to open the            web browser!\n");
    }
}

public static  JMenuBar menuBarCreator() {
    // create the menu parts
    JMenuBar menuBar = new JMenuBar();
    JMenu menuFile = new JMenu("File");
    JMenu menuHelp = new JMenu("Help");
    JMenuItem menuFileWebsite = new JMenuItem("Website");
    JMenuItem menuFileExit = new JMenuItem("Exit");
    JMenuItem menuHelpRules = new JMenuItem("Rules");
    JMenuItem menuHelpAbout = new JMenuItem("About");
    JMenuItem menuHelpHow = new JMenuItem("How To Play");

    // make the shortcuts for the items
    menuFile.setMnemonic(KeyEvent.VK_F);
    menuHelp.setMnemonic(KeyEvent.VK_H);

    // put the menu parts with eachother
    menuBar.add(menuFile);
    menuBar.add(menuHelp);
    menuFile.add(menuFileWebsite);
    menuFile.add(menuFileExit);
    menuHelp.add(menuHelpRules);
    menuHelp.add(menuHelpAbout);
    menuHelp.add(menuHelpHow);


    return menuBar;
}

public static Component setTitle() {
    JLabel title = new JLabel("Welcome To *the game*");
    title.setVerticalAlignment(JLabel.TOP);
    title.setHorizontalAlignment(JLabel.CENTER);
    return title;
}

}

ところで、私はWebサイトのオプション(今のところそれで作業しましょう)でlaunchURLメソッドを使用したいと考えています。私はそれがうまくいくことを知っています。

13
PulsePanda

JMenuItemはボタンの形式です(AbstractButton)。通常のパターンは、Actionを使用してボタンを作成することです(JMenuItemのコンストラクターを参照)。 Actionは、実行する名前とアクションを定義します。ほとんどの人はAbstractActionを拡張し、ボタンが押されたときに呼び出されるactionPerformedを実装します。

可能な実装は次のようになります。

JMenuItem menuItem = new JMenuItem(new AbstractAction("My Menu Item") {
    public void actionPerformed(ActionEvent e) {
        // Button pressed logic goes here
    }
});

または:

JMenuItem menuItem = new JMenuItem(new MyAction());
...
public class MyAction extends AbstractAction {
    public MyAction() {
        super("My Menu Item");
    }

    public void actionPerformed(ActionEvent e) {
        // Button pressed logic goes here
    }
}

上記で述べたすべてがJButtonにも適用されることに注意してください。また、Javaの非常に役立つ アクションの使用方法 チュートリアルもご覧ください。

14
Steve Kuo

次のようにして、JMenuItem1にActionListenerを追加するだけです。

jMenuItem1.addActionListener(new Java.awt.event.ActionListener() {
    public void actionPerformed(Java.awt.event.ActionEvent evt) {
        jMenuItem1ActionPerformed(evt);
    }
});

次に、jMenuItem1ActionPerformed(evt)にアクションを実装します。

private void jMenuItem1ActionPerformed(Java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    javax.swing.JOptionPane.showMessageDialog(null, "foo");
    // more code...
}

あなたのコードのために:

    ...
    JMenuItem menuFileWebsite = new JMenuItem("Website");
    JMenuItem menuFileExit = new JMenuItem("Exit");
    menuFileExit.addActionListener(new Java.awt.event.ActionListener() {
        @Override
        public void actionPerformed(Java.awt.event.ActionEvent evt) {
            menuFileExitActionPerformed(evt);
        }
    });
    JMenuItem menuHelpRules = new JMenuItem("Rules");

そして:

private static void menuFileExitActionPerformed(Java.awt.event.ActionEvent evt) {
    System.exit(0);
}
3
Costis Aivalis

ボタンにアクションを追加するには、ActionListenerインターフェイスを実装するクラスからオブジェクトを作成します。

menuFileWebsite.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        launchURL("http://www.google.com");
    }
});

ここでは、Actionlistenerインターフェースを実装する匿名の内部オブジェクトを作成し、actionperforemedメソッドをオーバーライドしてその作業を行います

Javaネーミングクラスの標準に準拠するようにコードを変更し、EDTでGUIコンポーネントを作成します。

// WindowMakerDemo.Java

import Java.awt.Component;
import Java.awt.EventQueue;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
import Java.awt.event.KeyEvent;

import javax.swing.*;


public final class WindowMakerDemo  {
    public static void main(String[] args) {
       EventQueue.invokeLater(new Runnable() {
           @Override
           public void run() {
                JFrame frame = new MyFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setTitle("*Game Title* Beta 0.0.1");
                frame.setSize(600, 400);
                frame.setLocation(100, 100);
                frame.setResizable(false);
                frame.setVisible(true);
           }
       });
    }
}

 final class MyFrame extends JFrame{

    public MyFrame() {
       createWindow();
    }

    private void createWindow() {
        setJMenuBar(menuBarCreator());
        add(setTitle());
    }

    private JMenuBar menuBarCreator() {
        // create the menu parts
        JMenuBar menuBar = new JMenuBar();
        JMenu menuFile = new JMenu("File");
        JMenu menuHelp = new JMenu("Help");

        JMenuItem menuFileWebsite = new JMenuItem("Website");
        JMenuItem menuFileExit = new JMenuItem("Exit");
        JMenuItem menuHelpRules = new JMenuItem("Rules");
        JMenuItem menuHelpAbout = new JMenuItem("About");
        JMenuItem menuHelpHow = new JMenuItem("How To Play");

        // website button action
        menuFileWebsite.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                launchURL("http://www.google.com");
            }
        });

        // exit action
        menuFileExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0); 
            }
        });

        // make the shortcuts for the items
        menuFile.setMnemonic(KeyEvent.VK_F);
        menuHelp.setMnemonic(KeyEvent.VK_H);

        // put the menu parts with eachother
        menuBar.add(menuFile);
        menuBar.add(menuHelp);

        menuFile.add(menuFileWebsite);
        menuFile.add(menuFileExit);

        menuHelp.add(menuHelpRules);
        menuHelp.add(menuHelpAbout);
        menuHelp.add(menuHelpHow);

        return menuBar;
    }

    private Component setTitle() {
        JLabel title = new JLabel("Welcome To *the game*");
        title.setVerticalAlignment(JLabel.TOP);
        title.setHorizontalAlignment(JLabel.CENTER);
        return title;
    }

    private void launchURL(String s) {
        String s1 = System.getProperty("os.name");
        try {

            if (s1.startsWith("Windows")) {
                Runtime.getRuntime().exec((new StringBuilder()).append("rundll32 url.dll,FileProtocolHandler ").append(s).toString());
            } else {
                String as[] = {"firefox", "opera", "konqueror", "epiphany",
                    "mozilla", "netscape"};
                String s2 = null;
                for (int i = 0; i < as.length && s2 == null; i++) {
                    if (Runtime.getRuntime().exec(new String[]{"which", as[i]}).waitFor() == 0) {
                        s2 = as[i];
                    }
                }

                if (s2 == null) {
                    throw new Exception("Could not find web browser");
                }
                Runtime.getRuntime().exec(new String[]{s2, s});
            }
        } catch (Exception exception) {
            System.out.println("An error occured while trying to open the            web browser!\n");
        }
    }
}
2
Wajdy Essam