Я создал всплывающее меню с двумя пунктами меню: «Редактирование и удаление». И затем я добавил это меню в два разных JLists.Один Java Swing PopupMenu для разных JLists против одного меню в JList
Результат щелчка «Правка» или «Удалить» отличается от JLists, поскольку они относятся к различным объектам (Удалить пункт меню: нужно удалить один объект из массива, а другой должен удалить другой объект из другого массива).
Мне интересно, какой из лучших способов сделать это, производительность или «хорошее кодирование» мудрым. Создать другое всплывающее меню для каждого компонента или использовать одно и то же всплывающее меню?
Я использую следующий код, чтобы выяснить, какие JList это:
JPopupMenu popupMenu = new JPopupMenu("Menu");
addPopup(listShowSources, popupMenu);
addPopup(listShowESS, popupMenu);
JMenuItem menuItemEdit = new JMenuItem("Edit");
popupMenu.add(menuItemEdit);
JMenuItem menuItemRemove = new JMenuItem("Remove");
popupMenu.add(menuItemRemove);
menuItemRemove.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent arg0) {
Component c = (Component)arg0.getSource();
JPopupMenu popup = (JPopupMenu)c.getParent();
JList<String> list = (JList <String>)popup.getInvoker();
System.out.println(list.getName());
}
});
С помощью этого кода, я буду создавать экземпляры Всплывающего меню и списки каждый раз, когда я нажмите кнопку. Является ли это «лучшим» способом сделать это или я должен просто создать 2 разных всплывающих меню?
Спасибо за помощь, Nhekas
благодарит за ваш ответ, но я использую модели списка. Однако мне нужны данные в массиве из-за других операций моего кода. Я использую эти Jlists в основном для отображения количества объектов, которые у меня есть в каждом массиве, поэтому пользователь может выбрать, какой из них нужен для других операций. Это говорит о том, что я использую модель списка для удаления и вставки элементов в эти JLists, как вы сказали. Однако, на ваш взгляд, следует ли мне это делать, как показано в коде в вопросе, или мне нужно создать 2 разных всплывающих меню в начале? Благодаря! – Nhekas
'Мне нужны данные в массиве из-за других операций моего кода' - когда вам нужны данные из модели, вы используете метод elementAt (...)' из DefaultListModel. Поэтому, когда пользователь выбирает элемент для обработки, это время, когда вы получаете данные из «ListModel». Не пытайтесь сохранить отдельный массив, вы можете легко перебирать все элементы в ListModel или получать доступ к одному элементу за раз. В другом случае вы используете метод с параметром вместо использования массива с индексом. Если вы правильно разработали приложение, нет необходимости в двух меню. – camickr
ОК! Большое спасибо за ваш ответ и подробное объяснение! Это было очень полезно и ответили на мой вопрос! – Nhekas