Visualizzazione dei risultati da 1 a 9 su 9

Discussione: JToogleButton icon

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51

    JToogleButton icon

    Salve,
    sto cercando di creare dei pulsanti personalizzati. Ho impostato l'icona di default (quando non selezionato) a un JToogleButton a icon-Off, e questo è ok, ma vorrei visualizzare un'icona diversa, icon-On, quando il JToogleButton è schiacciato nello stato selected. Tra i vari metodi per impostare le icone ho trovato setSelecteIcon() che mi sembrava quello giusto. In effetti mi cambia l'icona quando selezionato ma ha un effetto collaterale fastidioso come se mi attivasse il rollover. Cioè, quando è disattivato, passando sopra con il mouse mi cambia l'icona a ico-On, come se con il passaggio del mouseil pulsante, prendendo il focus, si considerasse come selezionato e quindi mi attiva la icon-On. Ma così non va bene. Ho raggiunto il risultato voluto gestendo l'evento ItemStateChanged:
    codice:
        private void jToggleButton1ItemStateChanged(java.awt.event.ItemEvent evt) {            
            int status = evt.getStateChange();
                if(status == ItemEvent.SELECTED){ 
                     jToggleButton1.setIcon(ico1);//ico-On
                }else if(status == ItemEvent.DESELECTED){
                    jToggleButton1.setIcon(ico2);//ico-Off
                }
        }
    Ma mi sembra uno spreco, possibile che non ci sia un metodo che mi permetta di selezionare l'icona allo stato selected senza effetti collaterali.
    Grazie

  2. #2
    Quote Originariamente inviata da cersil Visualizza il messaggio
    Ho raggiunto il risultato voluto gestendo l'evento ItemStateChanged:
    No, di per sé NON serve un ItemListener per questo, detto in generale.

    AbstractButton (la super-classe di tutti i "pulsanti") offre svariati metodi per le icone:

    - setIcon(Icon defaultIcon) : questa è l'icona predefinita
    - setPressedIcon(Icon pressedIcon) : questa è l'icona per lo stato "pressed", premuto
    - setRolloverIcon(Icon rolloverIcon) : questa è l'icona per lo stato "rollover" (ci passi solo sopra) ma normale
    - setRolloverSelectedIcon(Icon rolloverSelectedIcon) : questa è l'icona per il "rollover" ma quando è già selezionato
    - setSelectedIcon(Icon selectedIcon) : questa è l'icona per lo stato "selected", selezionato
    - setDisabledIcon(Icon disabledIcon) : questa è l'icona per lo stato "disabled" ma normale
    - setDisabledSelectedIcon(Icon disabledSelectedIcon) : questa è l'icona per lo stato "disabled" ma anche selected

    Per poter usare le icone in "rollover" bisogna fare anche setRolloverEnabled(true)

    Ma ci sono comunque tutti i casi e combinazioni possibili per i pulsanti. Quindi basta "giocare" bene una-tantum con queste icone e non devi gestire alcun evento.
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)
    Il mio blog sulla programmazione

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51
    andbin, ti ringrazio per le precisazioni.
    Grazie a queste ed in particolare a setRolloverEnabled() che ho risolto. Infatti impostando setPressedIcon(Ico-On) e setRolloverEnabled(false) ho ottenuto il risultato sperato. Mi devi però spiegare perché se attivavo solo setPressedIcon(ico-On) poi, quando siamo allo stato normale (deselected) e ci passo sopra con il mouse mi visualizza ico-On!? Poteva essere una ragione il focus!?
    Grazie ancora

  4. #4
    Quote Originariamente inviata da cersil Visualizza il messaggio
    Mi devi però spiegare perché se attivavo solo setPressedIcon(ico-On) poi, quando siamo allo stato normale (deselected) e ci passo sopra con il mouse mi visualizza ico-On!? Poteva essere una ragione il focus!?
    Uhm, innanzitutto una cosa: per poter usare la icona specifica "pressed" bisogna comunque impostare almeno quella di "default". Altrimenti quella pressed non si vede (ho fatto una prova al volo, ed è così).
    E se il pulsante è in stato normale (non pressed, non selected) e ci passi solo sopra .... non vedo come possa (di per sé) mettere la icona pressed.
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)
    Il mio blog sulla programmazione

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51
    Eppure mi fa rollover. Ti invio il progetto Netbeans così puoi provare. Ci sono anche le immagini.
    Grazie.
    File allegati File allegati

  6. #6
    Quote Originariamente inviata da cersil Visualizza il messaggio
    Eppure mi fa rollover. Ti invio il progetto Netbeans così puoi provare.
    Sì, vero, è come dici. (non ho un NetBeans ora ma ho compilato/eseguito "a mano").

    Siccome mi è parso strano, ho provato a non far impostare il Look&Feel "Nimbus" (è quello che fa in modo predefinito il codice autogenerato nel main() ). E infatti .... è colpa del Nimbus!

    Probabilmente usa un'altra logica leggermente diversa con le icone, direi che usa quella "selected" anche per il "rollover" e se non vuoi che lo faccia devi fare setRolloverEnabled(false). O settare esplicitamente la icona rollover diversa dalla selected.
    Ultima modifica di andbin; 13-02-2018 a 15:23
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)
    Il mio blog sulla programmazione

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51
    Ed infatti così avevo fatto. Certo che se uno volesse mantenere il rollover, cioè usare tre icone una normale, una in rollover ed una quando selected, deve cambiare Look end feel o cosa?

  8. #8
    Quote Originariamente inviata da cersil Visualizza il messaggio
    cioè usare tre icone una normale, una in rollover ed una quando selected, deve cambiare Look end feel o cosa?
    No, le setti tutte e tre ed è a posto anche con il Nimbus, ho provato.
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)
    Il mio blog sulla programmazione

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51
    Wauu! perfetto Grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.