Pregunta

Queremos mostrar una pista para una JList de que el usuario puede seleccionar varios elementos con la clave dependiente de la plataforma para la selección múltiple.

Sin embargo, no he encontrado ninguna forma de mostrar el símbolo OS X COMMAND en un JLabel, lo que significa que el símbolo que está impreso en el teclado de Apple en la tecla de comando, también llamado tecla de Apple.

Aquí hay una imagen del símbolo que quiero mostrar en OS X.  SÍMBOLO DE COMANDO
(fuente: wikimedia.org )

También quiero que sea independiente de la plataforma.

I.e. algo como

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

Donde en lugar del {0} debería aparecer el símbolo visto arriba ...

¿Alguno de ustedes sabe cómo hacer esto? Sé que debe ser posible de alguna manera ya que en JMenuItems hay un símbolo ...

Mi propio (soluciones no gráficas) se ve así:

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

Solución

El símbolo en cuestión está disponible a través de Unicode y los juegos de caracteres HTML. Todo lo que necesita hacer es hacer que su JLabel muestre HTML comenzando su cadena de texto con & Lt; html & Gt; y luego incluya el código de caracteres.

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

Esto funcionará en una Mac, pero no tengo idea de lo que hará en otras plataformas, aunque parece que eso está cubierto.

Otros consejos

Como señala David, puede usar la secuencia de escape Unicode \u2318 aunque debe mostrarse con una fuente que lo admita.

Su solución se ve perfecta. Supongo que tiene la intención de factorizar el código de pista para volver a usarlo.

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 el siguiente código para verificar el sistema y cargar en consecuencia

(System.getProperty("os.name").toUpperCase(Locale.US).indexOf("MAC OS X") == 0 )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top