Domanda

Ho creato 26 JButton in un actionListener anonimo etichettato come ogni lettera dell'alfabeto.

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 + "");
} 

Ora ho una classe keyListener anonima, dove vorrei disabilitare il pulsante in base alla lettera che è stata premuta sulla tastiera. Quindi, se l'utente preme A, il pulsante A è disabilitato. È forse possibile vista la mia attuale implementazione?

È stato utile?

Soluzione

Non potresti semplicemente dichiarare un array di 26 oggetti JButton a livello di classe, in modo che entrambi i listener possano accedervi? Credo che le classi interne anonime possano accedere alle variabili di classe e alle variabili finali.

Altri suggerimenti

Non so se si desidera disabilitare il pulsante o si desidera rimuoverlo? Nel tuo codice che stai chiamando rimuovi e nella tua risposta stai parlando di disabilitazione. È possibile ottenere ciò aggiungendo un KeyListener a alphabetPanel. Quindi potresti aggiungerlo subito prima di avviare il for-loop:

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

e invece di ActionListener aggiunto a JButton chiama questo:

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);
    }
});

È anche possibile scorrere i componenti, confrontando getText () con il tasto premuto.

Come indicato da qualcun altro, le classi anonime possono anche accedere ai membri della classe esterna e alle finali locali

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top