Отобразить символьный ключ команды OSX в виде JLabel

StackOverflow https://stackoverflow.com/questions/229021

  •  04-07-2019
  •  | 
  •  

Вопрос

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

Однако я не нашел никакого способа отобразить символ КОМАНДЫ OS X в 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 );
Это было полезно?

Решение

Символ, о котором идет речь, доступен через Unicode и наборы символов HTML.Все, что вам нужно сделать, это заставить вашу JLabel отображать HTML, начав ее текстовую строку с <html> , а затем включив код символа.

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

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

Другие советы

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

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

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

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

(System.getProperty("os.name").toUpperCase(Locale.US).indexOf("MAC OS X") == 0 )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top