Не получается отключать JPopupMenu методами setVisible() и setEnabled(). Отдельные JMenuItem без проблем обрабатываются этими методами, а вот меню целиком никак на них не реагирует. Как можно сделать, чтобы контекстное меню появлялось по правому клику только когда нужно? Какой метод способен включать и отключать его целиком?
import javax.swing.*;
public class PopupMenus extends JFrame {
public PopupMenus() {
super("PopupMenus");
setDefaultCloseOperation( EXIT_ON_CLOSE );
JPopupMenu popup = createPopupMenu();
((JComponent)getContentPane()).
setComponentPopupMenu(popup);
setSize(300, 200);
popup.setVisible(false); // Эти строки можно удалить.
popup.setEnabled(false); // Они не влияют ни на что.
setVisible(true);
}
private JPopupMenu createPopupMenu() {
JPopupMenu pm = new JPopupMenu();
JMenuItem good = new JMenuItem("Один");
JMenuItem excellent = new JMenuItem("Два");
pm.add(good);
pm.add(excellent);
return pm;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(
PopupMenus::new);
}
}
Строки
popup.setVisible(false);
popup.setEnabled(false);
не влияют на появление контекстного меню. Оно появляется при клике правой кнопкой мыши в любом случае. Что нужно сделать, чтобы была возможность отключать и включать возможность показа всего контекстного меню?
Набросал решеньице. Просто надо setComponentPopupMenu(null) сделать.
boolean showed = true;
PopupMenus() {
super("PopupMenus");
setDefaultCloseOperation( EXIT_ON_CLOSE );
JPopupMenu popup = createPopupMenu();
((JComponent)getContentPane()).setComponentPopupMenu(popup);
setSize(300, 200);
JPanel jPanel = new JPanel();
add(jPanel);
JButton jButton = new JButton("Button");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (showed) {
((JComponent)getContentPane()).setComponentPopupMenu(null);
showed = false;
} else {
((JComponent)getContentPane()).setComponentPopupMenu(popup);
showed = true;
}
}
});
// Или более коротко
// jButton.addActionListener(e -> ((JComponent)getContentPane()).setComponentPopupMenu((showed = !showed) ? popup : null));
jPanel.add(jButton);
setVisible(true);
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости