Pergunta

Queremos mostrar uma dica para uma JList que o usuário pode selecionar vários itens com a chave dependente plataforma para multiselect.

No entanto, eu não encontrei qualquer maneira de mostrar o símbolo OS X comando em uma JLabel, o que significa o símbolo que está impresso no teclado maçã na tecla de comando, também chamada de chave de maçã.

Aqui está uma foto do símbolo eu quero mostrar no OS X. comando Símbolo
(fonte: wikimedia.org )

Também eu quero tê-lo independente de plataforma.

i. 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 );

Onde vez do {0} não deve aparecer acima do símbolo visto ...

Será que qualquer um de vocês sabem como fazer isso? Eu sei que deve ser possível de alguma forma, já que nos JMenuItems há o símbolo ...

As minhas próprias (soluções não gráficas) se parece com isso:

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

Solução

O símbolo em questão é disponíveis através de Unicode, e os conjuntos de caracteres HTML. Tudo que você precisa fazer é fazer sua exposição HTML JLabel, iniciando a sua cadeia de texto com e, em seguida, incluir o código de caracteres.

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

Isto irá funcionar em um Mac, mas não tenho idéia do que ele vai fazer em outras plataformas, embora você parece ter que cobria off.

Outras dicas

Como David aponta, você pode usar o Unicode \u2318 sequência de escape embora deva ser exibido com uma fonte apoiá-lo.

A sua solução parece perfeito. Eu suponho que você pretende fator o código dica para que você reutilizá-lo.

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" );
}

Eu uso o seguinte código para verificar o sistema e carregar em conformidade

(System.getProperty("os.name").toUpperCase(Locale.US).indexOf("MAC OS X") == 0 )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top