Der Zugriff auf eine „namenlos“ Jdrücken in einer anonymen Klasse von einer anderen anonymen Klasse?

StackOverflow https://stackoverflow.com/questions/286651

Frage

Ich habe 26 JButton in einem anonymen actionListener als jeden Buchstaben des Alphabets bezeichnet.

for (int i = 65; i < 91; i++){
    final char c = (char)i;
    final JButton button = new JButton("" + c);
    alphabetPanel.add(button);
    button.addActionListener(
        new ActionListener () {
            public void actionPerformed(ActionEvent e) {
                letterGuessed( c );
                alphabetPanel.remove(button);
            }
        });
        // set the name of the button
        button.setName(c + "");
} 

Jetzt habe ich eine anonyme keyListener Klasse, wo Ich mag würde die Schaltfläche aus der Basis deaktivieren, welche Buchstaben auf der Tastatur gedrückt wird. Also, wenn der Benutzer A drückt, dann wird die A Taste ist deaktiviert. Ist dies überhaupt möglich meine aktuelle Implementierung gegeben?

War es hilfreich?

Lösung

Könnten Sie nicht einfach erklären, ein Array von 26 JButton Objekten auf Klassenebene, so dass beiden Hörer auf sie zugreifen können? Ich glaube, anonyme innere Klassen Klassenvariablen sowie abschließende Variablen zugreifen können.

Andere Tipps

Ich weiß nicht, wenn Sie die Taste deaktivieren, oder wollen Sie es entfernen? In Sie Code aufrufen Sie entfernen und in Ihrer Antwort Sie sprechen zu deaktivieren. Sie können dies erreichen, indem ein KeyListener zum alphabetPanel hinzufügen. So könnte man diese fügen Sie einfach vor dem Start der for-Schleife:

InputMap iMap = alphabetPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap aMap = alphabetPanel.getActionMap();

und statt Ihre Action zum JButton hat dieses Bild nennen:

iMap.put(KeyStroke.getKeyStroke(c), "remove"+c);
aMap.put("remove"+c, new AbstractAction(){
    public void actionPerformed(ActionEvent e) {
        // if you want to remove the button use the following two lines
        alphabetPanel.remove(button);
        alphabetPanel.revalidate();
        // if you just want to disable the button use the following line
        button.setEnabled(false);
    }
});

Sie können auch durch die Komponenten durchlaufen, zu vergleichen getText () an die Taste gedrückt wird.

Als jemand anders erwähnt, können anonyme Klassen auch Mitglieder der äußeren Klasse zugreifen sowie lokale Finale

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top