2013-10-12 40 views
1

我試圖讓一個JMenuBar隱藏並使用ctrl + h按鍵顯示,我已經成功完成了隱藏JMenu的操作但我不能使用Ctrl + H鍵顯示JMenu的,在這裏,他是代碼:JMenuBar - 使用快捷鍵隱藏JMenu Ctrl + h,擊​​鍵在setVisible後不起作用(false)

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;  
import view.Menu; 
import view.Window; 

public class MenuController implements ActionListener { 

    protected Window w; 
    protected Menu m; 

    public MenuController(Window w) { 
     this.w = w; 
     this.m = w.getMenu(); 
     m.getQuit().addActionListener(this); 
     m.getHide().addActionListener(this); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     String item = e.getActionCommand(); 
     if (item.equals("Quitter")) 
      System.exit(0); 
     if(item.equals("Masquer le menu")) { 
      if(m.isVisible() == true) 
       m.setVisible(false); 
      else 
       m.setVisible(true); 
     } 
    }  
} 

getHide(),給予對應的JMenuItem誰都有按鍵,如果你看到他的問題... 問候

編輯:所以在這裏,view.Menu類:

public class Menu extend小號的JMenuBar {

private static final long serialVersionUID = 1L; 
private JMenuItem quit = new JMenuItem(); 
private JMenuItem hide = new JMenuItem(); 


public Menu() { 
    JMenu menu1 = new JMenu("Fichier"); 

    hide.setText("Masquer le menu"); 
    hide.setEnabled(true); 
    hide.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_MASK)); 
    menu1.add(hide); 

    quit.setText("Quitter"); 
    quit.setEnabled(true); 
    quit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK)); 
    menu1.add(quit); 

    add(menu1); 
} 

public JMenuItem getQuit() { 
    return quit; 
} 

public JMenuItem getHide() { 
    return hide; 
} 

}

+0

「view.Menu」的超類是什麼?當您激活「隱藏」菜單項目時會發生什麼? – VGR

+0

所以當我激活隱藏菜單項時,菜單當前不顯示,我的問題是當我想再次顯示菜單時,按鍵不再起作用。 – zed13

+3

加速器不工作,如果menuBar沒有顯示,請參閱[最近QA的詳細信息](http://stackoverflow.com/a/18097498/203657) – kleopatra

回答

1

就像在評論中提到克列奧帕特拉,如果菜單是隱藏你的加速器將無法正常工作。如果你不需要其他關鍵組合,解決這個問題的一種方法(我認爲,比鏈接kleopatra發佈的技巧要少一些骯髒)將是在包含菜單欄的組件上註冊一個key binding執行相同的一組操作。

+0

當涉及到黑客,很少有任何一般的秩序偏好:-)複製綁定是一個很好的出路,如果沒有太多的項目 – kleopatra

+0

感謝球員的答案,我決定使用密鑰綁定,再次感謝:) – zed13

+0

@kleopatra絕對:)。我並不是想貶低你提到的任何技巧(實際上,我正在閱讀我的電話,並沒有注意到你已經寫了其他答案);過去我只是使用鍵綁定來達到類似的效果,所以這就是我第一次遇到的問題。 – Josh