簡體   English   中英

單擊禁用的JMenuItem時如何觸發動作?

[英]How to trigger an action when clicking a disabled JMenuItem?

我在SO中做了一些谷歌搜索和查找,但是找到的所有示例都是針對啟用JMenuItem情況。

我要執行的操作的上下文是,我希望禁用的JMenuItem (由於權限受限)在單擊時顯示一個彈出框,要求用戶升級以便他們可以訪問所述JMenuItem

以下是我目前所擁有的精簡版本,命令行上未打印任何內容:

public class ExportMenuItem extends JMenuItem
{
    public ExportMenuItem()
    {
        super("Menu Item Name");

        addMouseListener(new MouseAdapter()
            {
                @Override
                public void mouseClicked(MouseEvent mouseEvent)
                {
                    if (!isEnabled())
                    {
                        JOptionPane.showMessageDialog(editor.getFrame(), "Hello world.");
                        System.out.println("Sys print hello.");
                    }
                    System.out.println("Sys print hello outside.");
                }
            });
    }
}

這是你想要的?

import javax.swing.*;
import java.awt.event.*;

public class ExportMenuItem extends JMenuItem{

    public ExportMenuItem(){
        super("menu item");

        addMouseListener(new MouseListener(){
                @Override
                public void mouseClicked(MouseEvent mouseEvent){
                    if (!isEnabled())                    {
                        JOptionPane.showMessageDialog(null, "Upgrade me!");
                    }//end of if
                }//end of mouseClicked
                public void mouseExited(MouseEvent mouseEvent){}
                public void mouseEntered(MouseEvent mouseEvent){}
                public void mouseReleased(MouseEvent mouseEvent){}
                public void mousePressed(MouseEvent mouseEvent){}

                // And the remaining methods to implement...
            });//end of anonymous class
    }//end of constructor

    public static void main(String[] a){
        JFrame f = new JFrame();
        JMenu menu = new JMenu("menu");
        JMenuBar menuBar  = new JMenuBar();
        f.setJMenuBar(menuBar);
        f.setSize(300, 300);
        f.setVisible(true);
        menuBar.add(menu);
        JMenuItem item = new ExportMenuItem();
        menu.add(item);
        item.setEnabled(false);
    }//end of main
}//end of class

也許是一種完全不同的方法,對用戶而言更合乎邏輯:

在菜單項后面放置一個描述文字:

private void addRestartHint(JMenuItem m, String text) {
    final String spaceholder = "                                        ";
    String t = m.getText() + spaceholder;
    m.setLayout(new BorderLayout());
    m.setText(t);
    m.add(new JLabel(text), BorderLayout.EAST);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM