0

リスナーを持つデータベースから JMenuItems が取り込まれた JMenu があります。そのうちの 1 つは、選択された場合にデータベースからエントリを削除することです。これが発生すると、JMenuItem がメニューから消えるはずです。ここに例として短いビットがあります

for (final Racer r : Racer.getAllRacers()) {
        JMenuItem j = new JMenuItem(r.getName());
        racerDelete.add(j);
        j.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int reply = JOptionPane.showConfirmDialog(null,
                        "Are you sure you want to delete racer " + r.getName() + "?", "Delete?",
                        JOptionPane.YES_NO_OPTION);
                if (reply == JOptionPane.YES_OPTION){
                    r.delete();
                    racerDelete.remove(???);
                }

            }
        });
    }

では、「???」の代わりに何を入れることができますか? r のフィールドは、JMenuItem を識別するために必要なほぼすべてです。私はすでに racerDelete.remove(j) を試しましたが、うまくいかず、理由がわかりません。

4

2 に答える 2

1

秘訣は、エラー メッセージを読むことです。おそらく、「匿名クラス内で使用するには、変数 j を final として宣言する必要があります」などのメッセージが表示されます。コードを次のように変更します

    final JMenuItem j = new JMenuItem(r.getName());
    racerDelete.add(j);
    j.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            int reply = JOptionPane.showConfirmDialog(null,
                    "Are you sure you want to delete racer " + r.getName() + "?", "Delete?",
                    JOptionPane.YES_NO_OPTION);
            if (reply == JOptionPane.YES_OPTION){
                r.delete();
                racerDelete.remove(j);
            }

        }
    });
于 2013-10-11T20:41:00.613 に答える