Java JMenuItem文本和加速器从右向左对齐
我在Java应用程序中使用从右到左的菜单。Java JMenuItem文本和加速器从右向左对齐,java,swing,jmenuitem,Java,Swing,Jmenuitem,我在Java应用程序中使用从右到左的菜单。 我在所有JMenuBar,JMenu和JMenuItem元素上都使用了这个选项,使它们从右向左: jmenubar.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); jmenu1.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); jmenuitem1.applyComponentOrientation(
我在所有
JMenuBar
,JMenu
和JMenuItem
元素上都使用了这个选项,使它们从右向左:
jmenubar.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
jmenu1.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
jmenuitem1.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
现在的问题是JMenuItem
的文本正确对齐,但其键盘加速器未对齐,如下图所示(F2和F3不在视野范围内,其他未向左对齐):问题:如何修复从右向左的
JMenuItem
加速器对齐
对于SSCCE:
此代码产生以下问题:
public class test{
public static void main(String[] args){
try{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
javax.swing.JFrame frame = new javax.swing.JFrame("test");
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
javax.swing.JMenuBar menubar = new javax.swing.JMenuBar();
javax.swing.JMenu jmenu1 = new javax.swing.JMenu("\u0645\u0646\u0648");
javax.swing.JMenuItem jmenuitem1 = new javax.swing.JMenuItem("\u0645\u0646\u0648 \u06F1");
javax.swing.JMenuItem jmenuitem2 = new javax.swing.JMenuItem("\u0645\u0646\u0648 \u06F2");
javax.swing.JMenuItem jmenuitem3 = new javax.swing.JMenuItem("\u0645\u0646\u0648 \u06F3");
javax.swing.JMenuItem jmenuitem4 = new javax.swing.JMenuItem("\u0645\u0646\u0648 \u06F4");
jmenuitem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F2, 0));
jmenuitem2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
jmenuitem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK|java.awt.event.InputEvent.ALT_MASK));
jmenuitem4.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_D, java.awt.event.InputEvent.CTRL_MASK));
menubar.applyComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
jmenu1.applyComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
jmenuitem1.applyComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
jmenuitem2.applyComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
jmenuitem3.applyComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
jmenuitem4.applyComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
jmenu1.setFont(new java.awt.Font("Times New Roman", 0, 15));
jmenuitem1.setFont(new java.awt.Font("Times New Roman", 0, 15));
jmenuitem2.setFont(new java.awt.Font("Times New Roman", 0, 15));
jmenuitem3.setFont(new java.awt.Font("Times New Roman", 0, 15));
jmenuitem4.setFont(new java.awt.Font("Times New Roman", 0, 15));
frame.setJMenuBar(menubar);
menubar.add(jmenu1);
jmenu1.add(jmenuitem1);
jmenu1.add(jmenuitem2);
jmenu1.add(jmenuitem3);
jmenu1.add(jmenuitem4);
frame.setVisible(true);
frame.pack();
frame.setSize(200,200);
}
});
}catch(java.lang.Exception e){
System.out.println(e.getMessage());
}
}
}
你可以试试applycomponentation(),看。@trashgood:我试过了;同样的结果!这应该没有什么区别,但是在
操作中设置加速器可能值得一试。为了吸引更多的读者,请编辑您的问题,使其包含一个能展示您描述的问题的示例。@trashgood:我添加了产生问题的代码。谢谢您的示例-worksforme:-)