Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    JList: togliere il bordino del focus

    Vorrei fare in modo che una JList non mostri il bordino "di selezione" quando ha il focus.

    Ho risolto parzialmente usando setFocusable(false) ma in questo modo la lista non è più navigabile con le frecce direzionali.

    C'è modo di togliere il bordino del focus senza perdere la navigazione via tastiera?

    Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JList: togliere il bordino del focus

    Originariamente inviato da Alex'87
    C'è modo di togliere il bordino del focus senza perdere la navigazione via tastiera?
    Il disegno della cella (colore, sfondo, bordo ecc...) è affidato ad una implementazione di ListCellRenderer. Per default l'oggetto che fa da renderer in un JList è un javax.swing.DefaultListCellRenderer$UIResource.

    Se non si vuole realizzare un renderer ex-novo, si può fare:

    UIManager.put ("List.focusSelectedCellHighlightBorder", new EmptyBorder(1,1,1,1));
    UIManager.put ("List.focusCellHighlightBorder", new EmptyBorder(1,1,1,1));

    Ma vale per tutte le JList.

    Nota: può anche aiutare molto andare a vedere il sorgente di DefaultListCellRenderer.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: JList: togliere il bordino del focus

    Originariamente inviato da andbin
    Il disegno della cella (colore, sfondo, bordo ecc...) è affidato ad una implementazione di ListCellRenderer. Per default l'oggetto che fa da renderer in un JList è un javax.swing.DefaultListCellRenderer$UIResource.

    Se non si vuole realizzare un renderer ex-novo, si può fare:

    UIManager.put ("List.focusSelectedCellHighlightBorder", new EmptyBorder(1,1,1,1));
    UIManager.put ("List.focusCellHighlightBorder", new EmptyBorder(1,1,1,1));
    Ho provato ad inserire queste due righe nel mio programma, prima di instanziare qualsiasi oggetto grafico ma sembra non funzionare... :master: Ho Java 1.6.0_04

    Originariamente inviato da andbin
    Ma vale per tutte le JList.
    Ho solo due JList nel programma e vorrei togliere il bordino ad entrambe, quindi non è un problema.

    Intanto grazie


    EDIT

    Rettifico, non funziona con il look&feel "Aqua" (quello di default di Java su Mac OS X). Usando il L&F CrossPlatform invece, il codice che mi hai indicato funziona perfettamente.


    Mi avvio per la via del render
    Grazie ancora
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: JList: togliere il bordino del focus

    Originariamente inviato da Alex'87
    Rettifico, non funziona con il look&feel "Aqua" (quello di default di Java su Mac OS X). Usando il L&F CrossPlatform invece, il codice che mi hai indicato funziona perfettamente.
    Non conosco il L&F Aqua nei dettagli ma ti posso dire questo. Tra le varie property di UIResource c'è "List.cellRenderer" che appunto indica il cell renderer di default.

    Per il L&F Metal (il cross-platform) questa property indica la classe javax.swing.DefaultListCellRenderer$UIResource che è appunto quella che ho detto nel messaggio precedente. Questa classe va ad usare proprio quelle altre 2 property che ho menzionato.

    Ora ... può darsi che in Aqua la classe del renderer di default sia un'altra che magari non usa quelle 2 property. Ma potrebbe darsi che ne esistano altre più specifiche per Aqua.

    Insomma ... come hai sicuramente capito bisognerebbe inoltrarsi nei meandri di queste property.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.