Orientation JFrame de droite à gauche!

<!-Pour aligner mon JFrame de droite à gauche, j'utilise:

setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

mais cela ne fonctionne que si j'utilise le style (décoration) suivant de la 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);
      }
    });
  }
}

enter image description here

<!-Mais je veux que ça marche sans cette décoration. Comment résoudre ce problème?

EDIT:

<!-Je veux un JFrame comme celui-ci:

enter image description here

EDIT2:

je suis vraiment j'ai besoin que ce problème soit résolu, donc j'offre 500+ à qui donnera un JFrame comme celui-ci (avec WindowsLookAndFeel):

enter image description here

15
demandé sur Eng.Fouad 2011-06-23 18:35:13

6 réponses

@Eng.Fouad

juste une blague et celle-ci ???...

Substance L&F

code:

import java.awt.ComponentOrientation;
import javax.swing.JFrame;
import javax.swing.UIManager;
import org.pushingpixels.substance.api.skin.SubstanceOfficeSilver2007LookAndFeel;

public class RightToLeft {

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                try {
                    //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
                    UIManager.setLookAndFeel(new SubstanceOfficeSilver2007LookAndFeel());
                } 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);
            }
        });
    }

    private RightToLeft() {
    }
}
5
répondu mKorbel 2011-07-14 17:03:38

ce qui suit explique ce que vous observez à travers votre extrait de code:

ComponentOrientation ne s'applique qu'aux composants Swing (et AWT en fait).

en utilisant JFrame.setDefaultLookAndFeelDecorated(true);, Puis toute la décoration du cadre est réalisée par Swing (le LookAndFeel lui-même en fait), donc cela fonctionne comme prévu.

si vous ne définissez pas cette option cependant, cela signifie que L'OS est en charge de la décoration du cadre, cependant L'OS ne peut pas être conscient de la ComponentOrientation utilisé par vos composants Swing!

j'attends de l'OS (avez-vous mentionner l'OS que vous utilisez exactement? Il semble être Windows 7 droit?) pour effectuer la bonne décoration basée sur le actuellement sélectionné Locale. Par conséquent, si vous avez une configuration locale arabe et sélectionnée sur votre OS, je suppose que toutes les décorations de windows sont à droite à gauche. Avez-vous essayé de changer ce lieu (via le panneau de contrôle "région et langue")? Fait-il?

Remarque: je ne pense pas que vous pouvez modifier ces paramètres D'OS directement depuis Java, mais vous pouvez les lire avec Locale.getDefault().

Pour résumer:

  • tout d'abord, vous devez vous assurez-vous que votre système D'exploitation est correctement configuré en termes d'orientation du texte; désolé Je ne peux pas vous aider beaucoup ici parce que je n'ai pas de langue droite-à-gauche installée sur ma machine Windows.

  • ensuite, utilisez l'apparence du système et assurez-vous que JFrame.setDefaultLookAndFeelDecorated(false);

  • si cela ne fonctionne pas, alors vous pouvez envisager de poster votre code snippet, ainsi que votre configuration système vers la liste des bogues Java D'Oracle

Ce qui suit sont des notes supplémentaires sur la façon d'améliorer cette partie de ton code (mais ce n'est pas une solution pour votre problème)

soit dit en passant, si vous laissez l'utilisateur définir ses préférences de langage OS, alors vous ne devriez pas explicitement le code dur frame.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); mais plutôt d'utiliser quelque chose comme:

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

Locale.getDefault(), à moins qu'il ne soit explicitement modifié dans votre application, retournera le niveau OS actuellement sélectionné Locale.

notez Également qu'il est préférable d'utiliser applyComponentOrientation() plutôt que setComponentOrientation(), parce que la première règle récursivement l'orientation donnée à l'ensemble de la hiérarchie des composants.

enfin, vous devrez vous assurer dans vos fenêtres que le LayoutManager utilisé est de droite à gauche; ce qui est normalement OK avec tous les mises en page Swing standard, mais pas pour tous les gestionnaires de mise en page tiers, si vous utilisez certains.

7
répondu jfpoilpret 2016-08-29 10:03:50

je soupçonne qu'il doit faire plus avec le système D'exploitation. Normalement (si vous ne l'appelez pas setDefaultLookAndFeelDecorated) c'est L'OS qui fournit la décoration du cadre, pas le LAF.

vous devriez essayer de changer vos préférences dans L'OS pour dire que vous voulez l'orientation de droite à gauche.

Désolé, je ne sais pas où ces réglages. Une fois que vous faites cela, alors vous devriez être en mesure de supprimer l'appel à setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); comme le LAF va prendre les paramètres du système d'exploitation de la Paramètres régionaux.

EDIT

Ce Lien décrit comment activer le texte de droite à gauche sur Windows 7. Ensuite, J'Ai penser vous aussi, vous avez besoin d' changez de lieu.

3
répondu wolfcastle 2011-06-23 22:42:12

on dirait que la fonctionnalité D'Orientation des composants N'est pas supportée avec le LookAndFeel Windows (du moins pas pour la barre de titre)

1
répondu javagruffian 2011-06-23 17:34:13

Ici une possibilité. Cet utilitaire est conçu pour les utilisateurs Mac qui ont commuté à Windows et veulent les boutons de fenêtre sur la gauche, mais il devrait servir les mêmes besoins que le vôtre.

Cette solution n'a rien à voir avec Java (donc je ne sais pas si elle est même acceptable pour vos besoins) et semble être externe à votre application. Je n'ai pas pu l'essayer moi-même (je n'exécute pas Windows), donc je ne peux pas me porter garant pour elle, mais il pourrait être la peine d'une essayer.

1
répondu wolfcastle 2011-06-27 15:29:48

il suffit d'ajouter cette ligne de code et je suis sûr qu'elle fonctionne à 100%.

frame.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

enter image description here

0
répondu Ashraf Gardizy 2018-05-11 04:32:58