0

ユーザーが [バージョン情報] メニューをクリックすると、ポップアップ ウィンドウが表示されるようにしようとしています。Javaでそれを行うことは可能ですか?メニューをクリックしても actionPerformed が呼び出されないことがわかりました。少し検索した後、これを使用しようとする必要があることがわかりました:

new AbstractAction("Do XY")

しかし、NetBeans は、識別子が必要であると教えてくれます。これを行う他の方法はありますか、またはJavaはメニューバーに直接ボタンを許可しませんか?

4

2 に答える 2

3

もちろんJavaでもできます。MenuListenerメニューに a を追加するだけです。

以下はその例です (従来の「About」メニュー項目も実装しています)。

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

public class TestAboutMenu {

    protected void initUI() {
        final JFrame frame = new JFrame("test");
        JMenuBar bar = new JMenuBar();
        JMenu help = new JMenu("Help");
        help.addMenuListener(new MenuListener() {

            @Override
            public void menuSelected(MenuEvent e) {
                showAboutDialog(frame);
            }

            @Override
            public void menuDeselected(MenuEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void menuCanceled(MenuEvent e) {
                // TODO Auto-generated method stub

            }
        });
        JMenuItem about = new JMenuItem(new AbstractAction("About") {

            @Override
            public void actionPerformed(ActionEvent e) {
                showAboutDialog(frame);
            }
        });
        help.add(about);
        bar.add(help);
        frame.setJMenuBar(bar);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }

    protected void showAboutDialog(final JFrame frame) {
        JDialog dialog = new JDialog(frame);
        dialog.add(new JLabel("About this program"));
        dialog.setModal(true);
        dialog.pack();
        dialog.setLocationRelativeTo(frame);
        dialog.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestAboutMenu().initUI();
            }
        });
    }
}
于 2013-03-09T17:28:51.497 に答える
0

これを行うには、おそらく独自のメニュー バー クラスを作成する必要があります。しかし、あなたはそのようなトリックを行うことができます: mouseClicked() メソッドでマウスリスナーを書きます。メニュー バーを一番上に配置すると、境界が 0、windowWidth()、~20 (メニュー バーの高さ)、windowWidth() であることがわかります。次に、マウスの位置がこの長方形内にあるかどうかを確認します。はいの場合 - ポップアップ ウィンドウを表示します。それはその場でのアイデアなので、うまくいくかどうか教えてください。

于 2013-03-09T15:44:20.867 に答える