當您單擊JMenu(或者當您單擊相鄰的JMenu,然後將鼠標拖到它上面時)時的默認行爲是展開並顯示其子菜單和菜單項。當這種情況(菜單展開時)發生時,我可以將其他行爲(如生成事件)關聯起來嗎?如何讓JMenu在展開時做些事情?
1
A
回答
3
有事件監聽器類專門爲JMenus:
javax.swing.event.MenuListener
和
javax.swing.event.MenuDragMouseListener
您需要調用以將這些關聯到組件的方法是
JMenuComponentName.addMenuListener(MenuListener m);
和JMenuComponentName.addMenuMouseDragListener(MenuDragMouseListener m);
。
3
您可以使用MenuListener
這應該爲您提供有關菜單狀態的信息。
這個簡單的例子創建一個新的菜單項,每個菜單打開時...
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
public class TestMenuBar {
public static void main(String[] args) {
new TestMenuBar();
}
public TestMenuBar() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JMenuBar mb = new JMenuBar();
JMenu main = new JMenu("Test");
mb.add(main);
main.addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent e) {
System.out.println("Selected");
JMenu menu = (JMenu) e.getSource();
menu.add(new JMenuItem("I'm dynamiclly created"));
}
@Override
public void menuDeselected(MenuEvent e) {
System.out.println("deselected");
}
@Override
public void menuCanceled(MenuEvent e) {
System.out.println("Canceled");
}
});
JFrame frame = new JFrame("Testing");
frame.setJMenuBar(mb);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
相關問題
- 1. 如何讓JMenu項目在點擊時做某些事情
- 2. 有時候alert()會讓IE做某些事情,IE拒絕這樣的事情
- 3. 讓標籤做任何事情在vim
- 4. 如何在頁面忙於使用asp.net時做些事情?
- 5. 如何在輸入結帳時做些事情?
- 6. JQ Mobile可摺疊 - 想要在可摺疊展開時做些事情。不知道如何點燃它
- 7. 如何在jQuery中的事件之後做些事情?
- 8. 複選框更改狀態時如何做某些事情?
- 9. jQuery:如何在選擇選項時觸發事件/做些事情?
- 10. 如何讓PHP做同樣的事情我的ColdFusion做
- 11. 我如何讓Jenkins在git commit上做任何事情?
- 12. onclick事件做一些事情
- 13. 我想讓JMenu在程序啓動時顯示這些項目
- 14. 自定義標籤在開始和結束做一些事情
- 15. jQuery的在做一些事情的開始和動畫
- 16. 在Spinner打開對話框之前做一些事情 - Android
- 17. 有沒有辦法讓事情做點什麼,做任何事情?
- 18. 如何做一些事情,當準備好事件?
- 19. 如何在Android Gradle構建任務之前做些事情?
- 20. 如何在進程死於Windows之前做些事情
- 21. 如何讓javax.validation在某些情況下
- 22. 在經過的時間後做些事情C++ SFML 2
- 23. 在按住按鈕的同時做一些事情
- 24. get_position()在使用彩條時會做一些奇怪的事情
- 25. 當在CGRect中有觸摸時,做一些事情(Cocos2d Question)?
- 26. 如何讓這些div在滾動div內展開爲全寬?
- 27. 讓Rails在某個特定時間發生某些事情
- 28. 根據文件擴展名讓事情
- 29. 如何使一個VBScript做一些事情,當一個計劃是開放
- 30. 做事情在python
自從測試以來,我已經刪除了我的答案,這是明顯的錯誤。抱歉。 –
@ user2460978如果您想知道子菜單何時打開,那麼您需要將一個'PopupListener'附加到菜單'JPopupMenu'。查看'JMenu#getPopupMenu'作爲開始點。 – MadProgrammer