2

同じJPanelに属する2つのJList、jltCategoriesとjltSubcategoriesがあります。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を含めてください。

MouseListener補遺: を使用して更新を実行する理由は明らかではありません。ここListSelectionListenerに示すを使用します。

于 2012-05-13T02:56:32.533 に答える