将 JFrame 方向设置为从右到左!

2024-04-12

为了从右到左对齐我的 JFrame,我使用:

setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

但这仅当我使用 JFrame 的以下样式(装饰)时才有效:

public class RightToLeft {
  public static void main(String []args){
    javax.swing.SwingUtilities.invokeLater(new Runnable(){
      public void run() {
        try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); }
        catch (Exception e) { e.printStackTrace(); }
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("العنوان بالعربي");
        frame.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        frame.setSize(300,300);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
      }
    });
  }
}

但我希望它在没有这种装饰的情况下也能工作。如何解决这个问题?

EDIT:

@mre 我想要一个像这样的 JFrame:

EDIT2:

我真的非常需要解决这个问题,所以我向谁提供 500+ 提供这样的 JFrame(使用 WindowsLookAndFeel):


以下解释了您通过代码片段观察到的情况:

ComponentOrientation仅适用于 Swing(实际上是 AWT)组件。

使用时JFrame.setDefaultLookAndFeelDecorated(true);,然后整个框架装饰由 Swing 执行(实际上是 LookAndFeel 本身),因此这按预期工作。

如果您不设置此选项,则意味着操作系统负责框架装饰,但操作系统无法意识到ComponentOrientation由您的 Swing 组件使用!

我期望操作系统(你有没有提到你到底使用什么操作系统?似乎是 Windows 7 对吧?)根据当前选择执行正确的装饰Locale。因此,如果您有阿拉伯语言区域设置并在操作系统上选择,我想所有窗口装饰都是从右到左的。您是否尝试更改该区域设置(通过“区域和语言”控制面板)?有效吗?

注意:我认为您不能直接从 Java 更改这些操作系统设置,但您可以使用以下命令读取它们Locale.getDefault().

总结:

  • 首先,你必须确保您的操作系统配置正确在文本方向方面;抱歉,我在这里帮不了什么忙,因为我的 Windows 计算机上没有安装任何从右到左的语言。

  • 然后,使用系统外观并确保JFrame.setDefaultLookAndFeelDecorated(false);

  • 如果这不起作用,那么您可以考虑将您的代码片段以及您的系统配置发布到 Oracle Java bugs 列表

以下是有关如何改进这部分代码的额外说明(但这并不能解决您的问题)

顺便说一句,如果您让用户定义其操作系统语言首选项,那么您不应该显式硬编码frame.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);而是使用类似的东西:

frame.applyComponentOrientation(
    ComponentOrientation.getOrientation(Locale.getDefault()));

Where Locale.getDefault(),除非在应用程序中明确更改,否则将返回当前选择的操作系统级别Locale.

另请注意,最好使用applyComponentOrientation()而不是setComponentOrientation(),因为前者递归地将给定方向设置为组件的整个层次结构。

最后,您必须确保在您的窗口中LayoutManager使用的是从右到左感知的;这通常适用于所有标准 Swing 布局,但不适用于所有第 3 方布局管理器(如果您使用某些布局管理器)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JFrame 方向设置为从右到左! 的相关文章

随机推荐

  • Rails - has_one 关系:关联和非关联对象的范围

    我有这样的关系 一个用户可以拥有零只或一只狗 但狗必须属于某人 dog rb class Dog lt ActiveRecord Base belongs to user end user rb class User lt ActiveRe
  • 在数据库中存储布尔值的最佳数据类型是什么

    在数据库中存储布尔值的最佳数据类型是什么 最常用的 RDBMS 类型 例如 Mysql oracle postgres mssql 都支持它 您可以使用 TINYINT 或位数据类型
  • 如何将图例标题放在左侧?

    以下代码创建一个带有标题的图例 from pylab import plt plot 1 2 2 3 label sdfsdf legend title s s 位于图例的中心 我想知道如何将 s 放在左侧 最简单的选择可能是在标题后面添加
  • Hadoop 性能

    我安装了hadoop 1 0 0并尝试了字数统计示例 单节点集群 完成时间为 2 分 48 秒 然后我尝试了标准的 Linux 字数统计程序 该程序在同一组 180 kB 数据 上运行只需 10 毫秒 是我做错了什么 还是 Hadoop 非
  • 多个 CSS 伪类

    将多个伪类应用于选择器的正确 CSS 语法是什么 我想在列表中除最后一项之外的每一项之后插入 我正在使用以下CSS ul phone numbers li after content ul phone numbers li last chi
  • Oracle JDBC 和 Oracle CHAR 数据类型

    我在 Oracle JDBC 驱动程序的处理方面遇到了一个棘手的问题CHAR数据类型 让我们看一下这个简单的表格 create table x c char 4 insert into x c values a inserts a 所以当我
  • addEventListener,for(),索引。如何使用闭包? [复制]

    这个问题在这里已经有答案了 我有这个代码 var items this llistat getElementsByTagName a for var i 0 i lt items length i items i addEventListe
  • 如何使用MediaSession.setMediaButtonReceiver(PendingIntent)恢复播放

    当我的应用程序停止时单击耳机按钮时 我试图能够从我的应用程序开始音乐播放 我可以使用 MediaSession CallbackonMediaButtonEvent 或现已弃用的registerMediaButtonEventReceive
  • jQuery 未在引导模块中定义

    我想为我的网站使用 bootstrap 使用 node js 但我有以下错误 var www node modules bootstrap js transition js 59 jQuery ReferenceError jQuery 未
  • 在Android应用程序中集成视频文件作为应用程序背景

    我需要使用视频作为背景 首先 我将视频文件放在可绘制文件夹中 并称为背景LinearLayout在 main xml 中 但在运行该应用程序时 我只看到黑屏 然后我尝试使用VideoView并称其如下
  • Emacs - 调用时出错(服务器启动)

    我目前在 Windows Vista SP1 中使用 GNU Emacs 23 0 93 1 在我的 emacs 文件中 我调用 server start 这导致消息错误目录 emacs d server 不安全 有没有人见过这个并知道修复
  • 如何在c中将日期时间转换为unix时间戳?

    场景是 我使用 libexif 获取格式为 YYYY MM DD HH MM SS 的日期时间 为了最大限度地减少节省成本 我想将日期时间转换为unix时间戳或类似的值 只需要64位或32位 c 有什么明确的方法吗 你可以尝试组合使用str
  • .net core PGP加密解密

    上遇到错误void Encryption public void Encryption region PGP Encryption PgpEncryptionKeys encryptionKeys new PgpEncryptionKeys
  • 如何以人类可读的方式打开 Java .class 文件?

    我试图弄清楚 Java applet 类文件在幕后的作用 用记事本或文本板打开它只会显示一堆官样文章 有什么方法可以将其恢复为可读的格式 以便我可以尝试弄清楚它在做什么 环境 安装了 VS 2008 的 Windows jd gui htt
  • FFMPEG - 以特定时间间隔在视频上叠加多个视频

    我想以指定的时间间隔将多个视频叠加在单个视频上 尝试过不同的解决方案 但它不会像我一样工作 我使用下面的命令将视频叠加在视频上 String cmdWorking3 new String i yourRealPath i gifVideoF
  • 自动链接属性与实际链接不同的文本(setAutoLinkMask)

    例如 TextView tv TextView this findViewById R id tv tv setAutoLinkMask Linkify ALL tv setText visit website http www googl
  • 在 IIS7 上将多个域指向一个网站

    这与 SEO 没有任何关系 请不要发布任何有关 SEO 排名的内容 因为它不是这里的一个因素 我有2个网址 old websitename com 和 new websitename com 我需要在一定的时间内支持这两个 url 而不是在
  • 通过Python中的selenium驱动程序将图像导入谷歌表单

    我正在尝试将图像导入谷歌表单 我无法通过 xpath 将密钥传递给元素 看来这是一个隐藏的元素 我尝试执行脚本来取消隐藏它 但没有成功 也尝试过这个解决方案 如何使用 Selenium WebDriver python 访问隐藏的文件上传字
  • C++ 中的 Stringstream 解析单词和数字字符串

    我有这样的字符串 123加43次7 其中数字后面跟着字典中的单词 我知道我可以使用以下命令提取 int numbers gt gt 操作员 StringStream gt gt number 我可以拿到号码 然而 Stream 中仍然有该号
  • 将 JFrame 方向设置为从右到左!

    为了从右到左对齐我的 JFrame 我使用 setComponentOrientation ComponentOrientation RIGHT TO LEFT 但这仅当我使用 JFrame 的以下样式 装饰 时才有效 public cla