一个 Java 用于不同 JList 的 Swing PopupMenu 与每个 JList 一个菜单
One Java Swing PopupMenu for different JLists vs One Menu per JList
我创建了一个带有 2 个菜单项的弹出菜单:编辑和删除。然后,我将此菜单添加到 2 个不同的 JList。
JList 之间单击编辑或删除的结果不同,因为它们引用不同的对象(删除菜单项:一个应该从数组中删除一个对象,另一个应该从不同的数组中删除不同的对象)。
我想知道最好的方法是性能还是 "good-coding" 明智。为每个组件创建不同的弹出菜单还是使用相同的弹出菜单?
我正在使用以下代码找出它是哪个 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());
}
});
使用此代码,我将在每次按下按钮时创建弹出菜单和列表的实例。这是 "best" 的方法还是我应该制作 2 个不同的弹出菜单?
感谢您的帮助,
内卡斯
One should remove one object from an array and the other should remove a different object from a different array).
您不应该使用数组。
Swing 使用经过修改的模型-视图-控制器 (MVC) 设计。基本上这意味着 JList
中的数据显示必须包含在 ListModel
中。所以如果你想改变 JList
你改变 ListModel
.
因此不需要数组(即您不想将数据保存在两个地方)。 DefaultListModel
具有允许您直接更新模型的方法。
所以您的基本代码是正确的,因为您获得了弹出窗口的调用程序。所以现在您需要做的就是获取 DefaultListModel
:
DefaultListModel model = (DefaultListModel)list.getModel();
model.remove(...);
我创建了一个带有 2 个菜单项的弹出菜单:编辑和删除。然后,我将此菜单添加到 2 个不同的 JList。
JList 之间单击编辑或删除的结果不同,因为它们引用不同的对象(删除菜单项:一个应该从数组中删除一个对象,另一个应该从不同的数组中删除不同的对象)。
我想知道最好的方法是性能还是 "good-coding" 明智。为每个组件创建不同的弹出菜单还是使用相同的弹出菜单?
我正在使用以下代码找出它是哪个 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());
}
});
使用此代码,我将在每次按下按钮时创建弹出菜单和列表的实例。这是 "best" 的方法还是我应该制作 2 个不同的弹出菜单?
感谢您的帮助, 内卡斯
One should remove one object from an array and the other should remove a different object from a different array).
您不应该使用数组。
Swing 使用经过修改的模型-视图-控制器 (MVC) 设计。基本上这意味着 JList
中的数据显示必须包含在 ListModel
中。所以如果你想改变 JList
你改变 ListModel
.
因此不需要数组(即您不想将数据保存在两个地方)。 DefaultListModel
具有允许您直接更新模型的方法。
所以您的基本代码是正确的,因为您获得了弹出窗口的调用程序。所以现在您需要做的就是获取 DefaultListModel
:
DefaultListModel model = (DefaultListModel)list.getModel();
model.remove(...);