【问题标题】:Set JMenu Direction RTL设置 JMenu 方向 RTL
【发布时间】:2013-06-22 09:41:06
【问题描述】:

我有一个jMenuBar1,并且有两个jMenu 项目(比如jMenu1jMenu2)添加到jMenuBar1

我设法将jMenuBar1 对象与这行代码对齐:

jMenuBar1.add(Box.createHorizontalGlue());    

现在我正在尝试将 jMenu Items 中的文本右对齐并使文本 RTL(Right to Left),但似乎没有任何效果。 我已经试过了

Menu1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
jMenu1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);

没有运气。

任何解决方案都将受到高度赞赏。

【问题讨论】:

  • 我在您发布的部分中没有发现任何问题。你能发布更多相关的代码吗?
  • 您还试图将什么与其他内容对齐,为什么要添加胶水?
  • jMenu1.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
  • @kleopatra 菜单的名称,例如“创建成员”,我想将文本右对齐
  • @MarounMaroun 文本左对齐。这是顺序:左边有一个图标,中间有文字,然后有快捷键。

标签: java swing right-to-left jmenu


【解决方案1】:

您可能需要向我们提供更多信息,也许是一些屏幕截图,说明您拥有什么以及您想要实现什么,因为menu.setComponentOrientation() 似乎对我来说很好......

我明白了

运行这个

import javax.swing.*;
import java.awt.*;

public class MenuTest extends JFrame{

    public static void display()
    {
        JFrame frame = new JFrame();
        frame.setSize(400,400);
        frame.setLayout(new GridLayout(6,1));
        JMenuBar menuBar = new JMenuBar();
        menuBar.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        JMenu jMenu1 = new JMenu("Menu1");
        jMenu1.setMinimumSize(new Dimension(200, 20));
        jMenu1.setMaximumSize(new Dimension(200, 20));
        jMenu1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        JMenu jMenu2 = new JMenu("Menu2");
        jMenu2.setMinimumSize(new Dimension(200, 20));
        jMenu2.setMaximumSize(new Dimension(200, 20));
        JMenuItem menuItem1 = new JMenuItem("Item1");
        JMenuItem menuItem2 = new JMenuItem("Item2");
        menuItem1.setMinimumSize(new Dimension(200, 20));
        menuItem1.setMaximumSize(new Dimension(200, 20));
        menuItem1.setPreferredSize(new Dimension(200, 20));
        menuItem1.setSize(new Dimension(200, 20));
        menuItem2.setMinimumSize(new Dimension(200, 20));
        menuItem2.setMaximumSize(new Dimension(200, 20));
        menuItem1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        menuItem2.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        jMenu1.setHorizontalAlignment(JMenu.TRAILING);
        jMenu1.add(menuItem1);
        jMenu1.add(menuItem2);
        menuBar.add(jMenu1);
        menuBar.add(jMenu2);
        menuBar.setSize(frame.getWidth(), 20);
        frame.add(menuBar);
        frame.setVisible(true);
    }
    public static void main(String[] args)
    {
        EventQueue.invokeLater(
                new Runnable() {
                    @Override
                    public void run() {
                        MenuTest.display();
                    }
                }
         );
    }
}

【讨论】:

  • 与问题无关:不要tweak the sizing hints(又名:setXXSize)并且不要进行任何手动调整大小(又名:setSize)
  • 相关:猜测(没有 IDE 方便确认)如果您先添加每个孩子,然后在顶级父级上调用 applyCO,则无需在每个孩子上调用 setCO
  • @kleopatra 回复:尺寸调整,感谢您的提示,更多的是指出 setCO 工作。回复:在添加孩子后调用,这也是我的想法,但是当我尝试它似乎并没有传播给孩子时。
  • 感谢您的信息(并尽我所能检查我的猜测:-)
  • hmm ... 实际上,您的示例中的 applyComponentOrientation 工作形式:首先构建菜单栏而不对菜单/项目进行任何调整,然后在菜单栏和菜单栏上调用 applyCO,下面的完整组件层次结构出现在RToL 应该的。顺便说一句:菜单栏有自己的方法 frame.setJMenuBar
猜你喜欢
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 2018-07-03
相关资源
最近更新 更多