3

我们希望为 JList 显示一个提示,即用户可以使用与平台相关的键来选择多个项目以进行多选。

但是我还没有找到任何方法在 JLabel 中显示 OS X COMMAND 符号,这意味着在命令键上打印在苹果键盘上的符号,也称为苹果键。

这是我想在 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 );
4

4 回答 4

2

有问题的符号可通过 Unicode 和 HTML 字符集获得。您需要做的就是让您的 JLabel 显示 HTML,方法是使用 <html> 开始其文本字符串,然后包含字符代码。

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

这将在 Mac 上运行,但我不知道它会在其他平台上做什么,尽管你似乎已经掩盖了这一点。

于 2008-10-25T16:22:29.267 回答
1

正如大卫指出的那样,您可以使用 Unicode 转义序列\u2318,尽管它必须使用支持它的字体显示。

于 2008-10-25T18:03:32.400 回答
0

您的解决方案看起来很完美。我假设您打算分解提示代码以便重用它。

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" );
}
于 2008-10-24T07:56:03.647 回答
0

我使用以下代码检查系统并相应加载

(System.getProperty("os.name").toUpperCase(Locale.US).indexOf("MAC OS X") == 0 )
于 2008-10-24T10:49:55.263 回答