我创建了一个包含2个菜单项的弹出菜单:编辑和删除。然后,我将此菜单添加到2个不同的JLists中。
单击编辑或删除的结果在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());
}
});
使用此代码,每次按下按钮,我都会创建弹出菜单和列表的实例。这是最好的&#34;这样做的方法还是我应该制作两个不同的弹出菜单?
谢谢你的帮助, Nhekas
答案 0 :(得分:2)
一个应该从一个数组中删除一个对象,另一个应该从另一个数组中删除另一个对象。)
你不应该使用数组。
Swing使用修改后的模型 - 视图 - 控制器(MVC)设计。基本上这意味着JList
中的数据显示必须包含在ListModel
中。因此,如果您想更改JList
,请更改ListModel
。
因此不需要数组(即您不希望将数据保存在两个位置)。 DefaultListModel
具有允许您直接更新模型的方法。
所以你的基本代码是正确的,因为你得到了弹出窗口的调用者。所以现在你需要做的就是获得DefaultListModel
:
DefaultListModel model = (DefaultListModel)list.getModel();
model.remove(...);