Не получается отключать 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);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Java Если нажимаем на пустую клетку, все пустые вокруг открываются до непустыхКажется происходит зацикливание, пока не могу понять почему
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Есть класс @Entity ResultCode, далее есть интерфейс который extends CrudRepository, в классе контроллера я могу пользоваться resultCodeRepository интерфейсом, но в других...