2014-06-12 29 views
1

我在搜索引擎中做了一些搜索和搜索,但所有示例都適用於JMenuItem已啓用的情況。如何在單擊禁用的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."); 
       } 
      }); 
    } 
} 
+0

是否工具提示出現禁用的菜單項?爲了更快地獲得更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可驗證示例)。 –

+0

我創建了JMenuItem,並將其禁用,然後向它添加了一個MouseListener。代碼爲我工作得很好。 – camickr

+1

'//剩下的方法來實現......'改爲使用'MouseAdapter'。 –

回答

2

這是你在找什麼?

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 
0

也許完全不同的方法,對於用戶來說是更符合邏輯:

將菜單項後面的說明文字:

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); 
} 
相關問題