package com.fr.base.i18n; import com.fr.design.DesignerEnvManager; import javax.swing.border.TitledBorder; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.Container; import java.util.Locale; /** * 根据国际化获取组件方向 * * @author obo * @since 11.0 * Created on 2024/07/17 */ public class BidiUtils { private static final Locale LOCALE = DesignerEnvManager.getEnvManager().getLanguage(); private BidiUtils() { } public static ComponentOrientation getOrientationByLocale() { return ComponentOrientation.getOrientation(LOCALE); } public static T applyOrientationByLocale(T component) { component.applyComponentOrientation(ComponentOrientation.getOrientation(LOCALE)); return component; } public static T setOrientationByLocale(T component) { component.setComponentOrientation(ComponentOrientation.getOrientation(LOCALE)); return component; } public static void setOrientationByLocale(Component... components) { for (Component component : components) { component.setComponentOrientation(ComponentOrientation.getOrientation(LOCALE)); } } public static void applyOrientationByLocale(Component... components) { for (Component component : components) { component.applyComponentOrientation(ComponentOrientation.getOrientation(LOCALE)); } } public static boolean rtl() { return ComponentOrientation.getOrientation(LOCALE) == ComponentOrientation.RIGHT_TO_LEFT; } /** * 拼接字符数组,有的组件名是多段字符串拼接起来的,如果是rtl的话需要反向拼接 */ public static String concatenateStrings(String... strs) { StringBuilder result = new StringBuilder(); if (rtl()) { for (int i = strs.length - 1; i >= 0; i--) { result.append(strs[i]); } } else { for (int i = 0; i <= strs.length - 1; i++) { result.append(strs[i]); } } return result.toString(); } public static T applyTitledBorderJustification(T titledBorder) { titledBorder.setTitleJustification(BidiUtils.rtl() ? TitledBorder.RIGHT : TitledBorder.LEFT); return titledBorder; } /** * 镜像BoxLayout布局组件 */ public static void mirrorBoxLayout(Container container) { Component[] components = container.getComponents(); for (int i = components.length - 1; i >= 0; i--) { Component component = components[i]; container.remove(i); container.add(component); } container.revalidate(); container.repaint(); } }