gpt4 book ai didi

java - 针对不同 JList 的一个 Java Swing PopupMenu 与每个 JList 一个菜单

转载 作者:行者123 更新时间:2023-12-02 03:37:39 31 4
gpt4 key购买 nike

我创建了一个包含 2 个菜单项的弹出菜单:编辑和删除。然后,我将此菜单添加到 2 个不同的 JList 中。

单击“编辑”或“删除”的结果在 JList 之间是不同的,因为它们引用了不同的对象(删除菜单项:一个应该从数组中删除一个对象,另一个应该从不同的数组中删除不同的对象)。

我想知道哪种方法是最好的方法,性能还是“良好编码”。为每个组件创建不同的弹出菜单还是使用相同的弹出菜单?

我使用以下代码来找出它是哪个 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 个不同的弹出菜单?

谢谢你的帮助,尼卡斯

最佳答案

One should remove one object from an array and the other should remove a different object from a different array).

您不应该使用数组。

Swing 使用修改后的模型- View - Controller (MVC) 设计。基本上,这意味着 JList 中显示的数据必须包含在 ListModel 中。因此,如果您想更改 JList,您可以更改 ListModel

所以不需要数组(即你不想将数据保存在两个地方)。 DefaultListModel 具有允许您直接更新模型的方法。

所以你的基本代码是正确的,因为你得到了弹出窗口的调用者。所以现在您需要做的就是获取 DefaultListModel:

DefaultListModel model = (DefaultListModel)list.getModel();
model.remove(...);

关于java - 针对不同 JList 的一个 Java Swing PopupMenu 与每个 JList 一个菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240556/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com