Der Zugriff auf eine „namenlos“ Jdrücken in einer anonymen Klasse von einer anderen anonymen Klasse?
-
08-07-2019 - |
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?
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