Domanda

Vogliamo mostrare un suggerimento per un elenco J che l'utente può selezionare più elementi con la chiave dipendente dalla piattaforma per la selezione multipla.

Tuttavia non ho trovato alcun modo per mostrare il simbolo COMANDO OS X in una JLabel, il che significa che il simbolo è stampato sulla tastiera Apple sul tasto comando, chiamato anche tasto Apple.

Ecco un'immagine del simbolo che voglio visualizzare su OS X.  SIMBOLO COMANDO
(fonte: wikimedia.org )

Inoltre, voglio che sia indipendente dalla piattaforma.

vale a dire. qualcosa come

component.add( new JList() , BorderLayout.CENTER );
component.add( new JLabel( MessageFormat.format("With {0} you can " 
  + "select multiple items", 
  KeyStroke.getKeyStroke( ... , ... ) ) ) , BorderLayout.SOUTH );

Dove invece del {0} dovrebbe apparire sopra il simbolo visto ...

Qualcuno di voi ragazzi sa come farlo? So che deve essere possibile in qualche modo poiché in JMenuItems c'è il simbolo ...

La mia (soluzioni non grafiche) è simile a questa:

add( new JLabel( MessageFormat.format(
  "With {0} you can select multiple items" , 
  System.getProperty( "mrj.version" ) != null ? "COMMAND" : "CTRL" ) ) ,
  BorderLayout.SOUTH );
È stato utile?

Soluzione

Il simbolo in questione è disponibile tramite Unicode e i set di caratteri HTML. Tutto quello che devi fare è fare in modo che JLabel visualizzi l'HTML avviando la sua stringa di testo con & Lt; html & Gt; e quindi includere il codice carattere.

JLabel label = new JLabel( "<html>&#8984; is the Apple command symbol." );

Funzionerà su un Mac, ma non ho idea di cosa farà su altre piattaforme, anche se sembra che tu lo abbia coperto.

Altri suggerimenti

Come sottolinea David, puoi usare la sequenza di escape Unicode \u2318 anche se deve essere visualizzata con un font che la supporti.

La tua soluzione sembra perfetta. Suppongo che intendi fattorizzare il codice di suggerimento in modo da riutilizzarlo.

add( new JLabel( MessageFormat.format(
  "With {0} you can select multiple items", 
  getMetaKeyHint(),
  BorderLayout.SOUTH );

public String getMetaKeyHint() {
    return System.getProperty( "mrj.version" ) != null ? "COMMAND" : "CTRL" );
}

Uso il seguente codice per verificare il sistema e caricare di conseguenza

(System.getProperty("os.name").toUpperCase(Locale.US).indexOf("MAC OS X") == 0 )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top