Отобразить символьную клавишу OSX Command в JLabel - PullRequest
3 голосов
/ 23 октября 2008

Мы хотим показать подсказку для JList, что пользователь может выбрать несколько элементов с помощью зависимого от платформы ключа для множественного выбора.

Однако я не нашел способа показать символ OS X COMMAND в JLabel, что означает символ, напечатанный на клавиатуре apple на клавише управления, также называемый apple key.

Вот изображение символа, которое я хочу отобразить в OS X. COMMAND SYMBOL
(источник: wikimedia.org )

Также я хочу, чтобы она была независимой от платформы.

т.е. что-то вроде

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

Где вместо {0} должен появиться вышеуказанный символ ...

Кто-нибудь из вас, ребята, знает, как это сделать? Я знаю, что это должно быть как-то возможно, так как в JMenuItems есть символ ...

Мои собственные (не графические решения) выглядят так:

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

Ответы [ 4 ]

2 голосов
/ 25 октября 2008

Соответствующий символ доступен через Юникод и наборы символов HTML. Все, что вам нужно сделать, это заставить ваш JLabel отображать HTML, начиная его текстовую строку с , а затем включать код символа.

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

Это будет работать на Mac, но я понятия не имею, что он будет делать на других платформах, хотя вы, похоже, это и закрыли.

1 голос
/ 25 октября 2008

Как указывает Дэвид, вы можете использовать escape-последовательность Unicode \u2318, хотя она должна отображаться со шрифтом, поддерживающим ее.

0 голосов
/ 24 октября 2008

Я использую следующий код для проверки системы и загрузки соответственно

(System.getProperty("os.name").toUpperCase(Locale.US).indexOf("MAC OS X") == 0 )
0 голосов
/ 24 октября 2008

Ваше решение выглядит идеально. Я предполагаю, что вы намереваетесь выделить код подсказки, чтобы использовать его повторно.

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