Swing/DisableRightClickOnMenu のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DisableRightClickOnMenu へ行く。
- 1 (2020-03-16 (月) 00:37:55)
- 2 (2020-03-16 (月) 04:49:48)
- 3 (2020-03-16 (月) 19:23:05)
- 4 (2021-09-07 (火) 17:00:09)
- 5 (2022-08-20 (土) 22:15:25)
- category: swing folder: DisableRightClickOnMenu title: JMenuとJMenuItemで右クリックによる選択を無効にする tags: [JMenu, JMenuItem, WindowsLookAndFeel] author: aterai pubdate: 2020-03-16T00:36:39+09:00 description: JMenuとJMenuItemをマウスの右クリックで選択してもWindowsLookAndFeelの場合は無効になるよう設定します。 image: https://drive.google.com/uc?id=1RIzzl_rzPcMQIQGm9YL20ghL-xJKtT34
概要
JMenuとJMenuItemをマウスの右クリックで選択してもWindowsLookAndFeelの場合は無効になるよう設定します。
Screenshot
Advertisement
サンプルコード
class CustomWindowsMenuUI extends WindowsMenuUI {
@Override protected MouseInputListener createMouseInputListener(JComponent c) {
return new BasicMenuItemUI.MouseInputHandler() {
@Override public void mousePressed(MouseEvent e) {
JMenu menu = (JMenu) menuItem;
if (!menu.isEnabled() || SwingUtilities.isRightMouseButton(e)) {
return;
}
super.mousePressed(e);
}
};
}
}
class CustomWindowsMenuItemUI extends WindowsMenuItemUI {
@Override protected MouseInputListener createMouseInputListener(JComponent c) {
return new BasicMenuItemUI.MouseInputHandler() {
@Override public void mouseReleased(MouseEvent e) {
if (!menuItem.isEnabled() || SwingUtilities.isRightMouseButton(e)) {
return;
}
super.mouseReleased(e);
}
};
}
}
View in GitHub: Java, Kotlin解説
Default
- デフォルトの
WindowsLookAndFeel
では、JMenu
やJMenuItem
を右クリックで選択可能
- デフォルトの
DisableRightClick
WindowsLookAndFeel
が設定されている場合はマウスの右クリックを無効にするCustomWindowsMenuUI
を設定JMenu menu1 = new JMenu("DisableRightClick") { @Override public void updateUI() { super.updateUI(); if (getUI() instanceof WindowsMenuUI) { setUI(new CustomWindowsMenuUI()); } } @Override public JMenuItem add(String s) { JMenuItem item = new JMenuItem(s) { @Override public void updateUI() { super.updateUI(); if (getUI() instanceof WindowsMenuItemUI) { setUI(new CustomWindowsMenuItemUI()); } } }; return add(item); } };
WindowsMenuUI#createMouseInputListener()
で生成されるMouseInputListener
をBasicMenuItemUI.MouseInputHandler#mousePressed(...)
をオーバーライドしたリスナーに置き換えSwingUtilities.isRightMouseButton(e)
で右クリックの場合はなにも実行しない