2

我有两个 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");
        }
});
4

1 回答 1

3

光看是不够revalidate()的;您还必须让模型通知视图新数据可用。

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

如果这无效,请编辑您的问题以包含一个显示您描述的问题的sscce

附录:不清楚你为什么使用 aMouseListener来影响更新;使用 a ,ListSelectionListener如图所示

于 2012-05-13T02:56:32.533 回答