我在使用Windows XP上运行的Java Swing应用程序中的上下文菜单上的助记符时始终显示下划线时遇到了一些麻烦。
如果我右键单击鼠标,则下划线不会显示在弹出菜单上 - 这很好,因为这种行为与其他Windows应用程序一致。
但是如果使用菜单键(通常在右侧Windows键旁边)弹出弹出菜单,则下划线不会显示在我的Swing应用程序中,而它们会显示标准Windows应用程序,如Wordpad和Explorer以及控制面板。
我可以获得下划线的唯一方法是,如果我在右键单击鼠标时按住Alt键。这有点无用,因为如果有人已经用鼠标右键单击它们就不会想要使用键盘在弹出窗口中选择一些内容。
从菜单键调出上下文菜单时,是否可以在Swing中显示下划线?没有写我自己的Look&觉得图书馆?
答案 0 :(得分:0)
好问题。我刚刚在OS X上试过这个,我也没有得到带下划线的字母。就像你一样,我通过点击alt按钮获得它们(不是在点击期间,而是在显示我的弹出菜单时)。
然而,在OS X上我不记得任何包含带下划线字母的弹出窗口。我刚刚检查了一些默认应用程序,但它们都没有带下划线项目的弹出菜单。快速Google搜索indicated this as well。因此,在这种情况下,外观与操作系统一致。
经过一些谷歌搜索后,我发现following topic表明在Windows中有默认隐藏助记符的选项,只有当你按下alt时才会显示它们(你需要按下它才能使用如果我从窗户的日子里记得正确,那就是助记符。你可能想尝试一下。
无论如何,这是一个允许Windows用户快速测试的SSCCE:
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
public class MnemonicTest {
public static JFrame createUI(){
JFrame testFrame = new JFrame( );
testFrame.add( createLabelWithPopupMenu() );
testFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
testFrame.pack();
return testFrame;
}
private static JLabel createLabelWithPopupMenu(){
JLabel result = new JLabel( "Right-click me" );
result.setComponentPopupMenu( createPopupMenu() );
return result;
}
private static JPopupMenu createPopupMenu(){
JPopupMenu popupMenu = new JPopupMenu( );
popupMenu.add( createAction() );
return popupMenu;
}
private static Action createAction(){
AbstractAction result = new AbstractAction() {
@Override
public void actionPerformed( ActionEvent e ) {
System.out.println( "MnemonicTest.actionPerformed" );
}
};
result.putValue( Action.MNEMONIC_KEY, KeyEvent.VK_A );
result.putValue( Action.NAME, "Action" );
return result;
}
public static void main( String[] args ) {
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
createUI().setVisible( true );
}
} );
}
}