Отобразить символьный ключ команды OSX в виде JLabel
Вопрос
Мы хотим показать подсказку для JList о том, что пользователь может выбрать несколько элементов с помощью зависящего от платформы ключа для multiselect.
Однако я не нашел никакого способа отобразить символ КОМАНДЫ OS X в JLabel, что означает символ, который печатается на клавиатуре Apple на командной клавише, также называемой apple key.
Вот изображение символа, который я хочу отобразить в OS X.
(источник: 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>⌘ 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 )