好问题。我刚刚在 OS X 上试过这个,我也没有得到带下划线的字母。就像你一样,我通过点击 alt 按钮来获得它们(不是在单击期间,而是在显示我的弹出菜单时)。
但是,在 OS XI 上,无法记住任何包含下划线字母的弹出窗口。我刚刚检查了一些默认应用程序,它们都没有带有下划线项目的弹出菜单。一个快速的谷歌搜索也表明了这一点。所以在这种情况下,外观与操作系统是一致的。
经过一番谷歌搜索后,我发现以下主题表明,在 Windows 中,默认情况下有一个隐藏助记符的选项,并且仅在您按 alt 时显示它们(如果我没记错的话,您需要按任何方式使用助记符我的窗户日子)。您可能想尝试一下。
无论如何,这里有一个 SSCCE 允许 Windows 用户快速测试:
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 );
}
} );
}
}