无法使用HTML文本在JLabel中设置助记符

时间:2009-12-06 22:15:11

标签: java swing

以下将JLabel与JTextArea关联,并设置装饰标签的助记符。在Windows上按Alt-X会将焦点移动到JTextArea。

    JTextArea textArea = new JTextArea(10, 20);
    JLabel label = new JLabel("Text");
    label.setLabelFor(textArea);
    label.setDisplayedMnemonic(KeyEvent.VK_X);

但是,如果label使用HTML,则标签会按预期显示,但不会使用助记符进行修饰。

    JTextArea textArea = new JTextArea();
    JLabel label = new JLabel("<html>Text</html>"); //!!! NO DECORATION
    label.setLabelFor(textArea);
    label.setDisplayedMnemonic(KeyEvent.VK_X);

这是预期的行为吗?任何解决方法?

编辑1 :修改了示例,根据Aziz的响应使用不属于HTML标记的助记符。

编辑2 :删除了有关助记键不起作用的评论,因为进一步的实验表明这取决于使用的外观。

2 个答案:

答案 0 :(得分:2)

BasicLabelUI以不同的方式绘制标签,具体取决于是否有HTML。如果没有,BasicLabelUI会调用一些自己的函数来绘制下划线。如果是,则使用BasicHTML.Renderer,并且不绘制任何下划线。

最简单的解决方法是:

JLabel label = new JLabel("<html>Te<u>x</u>t</html>");

答案 1 :(得分:1)

可能是因为t中的<html>是带下划线的那个。

尝试使用setDisplayedMnemonicIndex()来修复