3

I'm using right to left menus in a Java application.
I used this on all JMenuBar,JMenu & JMenuItem elements to make them right to left:

jmenubar.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
jmenu1.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
jmenuitem1.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

Now the problem is JMenuItem's text is aligned right correctly but its keyboard accelerator is misaligned as this image shows (F2 & F3 are out of view and others are not aligned left):
F2 & F3 are out of view and others are not aligned left

Question: How can fix a right to left JMenuItem's accelerator alignment?


For SSCCE:
This Code Produces the problem:

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());
        }
    }
}
Frakcool
  • 10,915
  • 9
  • 50
  • 89
Ariyan
  • 14,760
  • 31
  • 112
  • 175
  • 1
    You might try `applyComponentOrientation()`, seen [here](http://stackoverflow.com/a/6475412/230513). – trashgod Nov 02 '12 at 02:10
  • @trashgod: I tried; and same result! – Ariyan Nov 02 '12 at 11:27
  • It shouldn't make any difference, but setting the accelerator in an `Action`, seen [here](http://stackoverflow.com/a/5129757/230513), may be worth a try. To reach a broader audience, edit your question to include an [sscce](http://sscce.org/) that exhibits the problem you describe. – trashgod Nov 02 '12 at 11:41
  • @trashgod: I added the code that produces problem. – Ariyan Nov 02 '12 at 20:19
  • thanks for the example - worksforme :-) – kleopatra Nov 03 '12 at 10:27

0 Answers0