Domanda

Sto cercando di creare una sottoclasse del componente JButton che abilitare o disabilitare la stessa base a una condizione (che assomiglia sotto)

public interface Condition {
    public static final Condition TRUE  = new Condition() { 
                                          public boolean test() {
                                              return true;
                                          } };
    public static final Condition FALSE = new Condition() { 
                                          public boolean test() {
                                              return false;
                                          } };
    public boolean test();
}

Tuttavia, il codice JButton è tutto basato sul valore booleano effettivo memorizzato privatamente nella classe JButton. La mia domanda è: quale metodo di JButton può essere ignorato per aggiornare la sua booleano isEnabled memorizzati (via setEnabled (booleano))? Sarebbe aggiornamento (Graphics)? o repaint ()? O qualche altra funzione?

Edit: sono reso conto che quello che sto cercando di creare è in realtà impossibile, a meno che non si dispone di un thread separato che attende brevi periodi di tempo e le forze il pulsante per verificarne lo stato (che è grave e che non si vuole fare quella). Il fatto è che i tasti sono solo reattivi. Sarebbe possibile per raggiungere questo obiettivo con un certo overhead da chi utilizza la classe Button, ma a quel punto sarebbe più facile per soli ascoltatori di scrittura su tutto ciò che è in realtà cambiando quindi spostare il pulsante in quel punto. Woops.

È stato utile?

Soluzione

Il DefaultButtonModel , per esempio , mantiene un stateMask, che comprende un po 'per lo stato attivato. Si potrebbe implementare l'interfaccia ButtonModel di conseguenza.

Addendum: In alternativa, e come indicato nell'articolo < em> associazioni di tasti , "un altro vantaggio di Actions è che hanno uno stato abilitato che fornisce un modo semplice per disabilitare l'azione senza dover tenere traccia quale componente è attaccato al." Vedere Come utilizzare azioni per ulteriori informazioni.

Altri suggerimenti

sono fermamente suggerisco di usare azioni per implementare tale funzione.

Si dovrebbe abilitare / disabilitare l'azione collegata al pulsante. In Swing stessa azione può essere associata a molti tipi di componenti quali pulsanti, voci di menu, ecc disattivando una specifica azione si disattiva automaticamente tutti i componenti associati.

Questo diventa molto utile quando si hanno le barre degli strumenti, menu contestuale ecc con lo stesso insieme di azioni.

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