以下将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 :删除了有关助记键不起作用的评论,因为进一步的实验表明这取决于使用的外观。
答案 0 :(得分:2)
BasicLabelUI以不同的方式绘制标签,具体取决于是否有HTML。如果没有,BasicLabelUI会调用一些自己的函数来绘制下划线。如果是,则使用BasicHTML.Renderer,并且不绘制任何下划线。
最简单的解决方法是:
JLabel label = new JLabel("<html>Te<u>x</u>t</html>");
答案 1 :(得分:1)
可能是因为t
中的<html>
是带下划线的那个。
尝试使用setDisplayedMnemonicIndex()来修复