gpt4 book ai didi

java - 删除并添加回 JPanel 后,MouseEvent 不会在 JList 中触发

转载 作者:行者123 更新时间:2023-12-04 05:46:53 24 4
gpt4 key购买 nike

我有两个 JList,jltCategories 和 jltSubcategories,属于同一个 JPanel。双击 jltCategories 会导致 jltSubcategories 填充相应的子类别,并且 jltSubcategories 从 JPanel 中删除,添加回来并重新验证。

删除/添加回来后双击 jltSubcategories 不会触发任何内容。然而,如果我打开程序并双击 jltSubcategories,它会触发它的鼠标事件:如果它没有被删除/添加回来,它将触发,但如果它已被删除/添加回来,它将不会触发。 jltCategories 相同:如果我导致它被删除/添加,它将停止触发。为什么会这样?谢谢!

jltCategories.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() > 1) {
jbtNavigate.doClick();
}
}
});
jltSubcategories.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() > 1) {
jbtLoad.doClick();
}
}
});
jbtNavigate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String catName = jltCategories.getSelectedValue();
try {
jpLists.remove(jltSubcategories);
jltSubcategories = new JList<String>(SQL.populateSubcategories(catName));
jpLists.add(jltSubcategories);
jpLists.revalidate();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
jbtLoad.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Testing Testing 213");
}
});

最佳答案

还不够revalidate()风景;您还必须让模型通知 View 新数据可用。

DefaultListModel  model = (DefaultListModel ) jltSubcategories.getModel();
model.fireContentsChanged(0, model.getSize());

如果这无效,请编辑您的问题以包含 sscce表现出您描述的问题。

附录:不清楚你为什么使用 MouseListener使更新生效;使用 ListSelectionListener , 显示 here .

关于java - 删除并添加回 JPanel 后,MouseEvent 不会在 JList 中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568928/

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