Bonjour,
Comment faire pour que la langue de jtextfield a changé en arabe sans passer par la barre de windows ?
Bonjour,
Comment faire pour que la langue de jtextfield a changé en arabe sans passer par la barre de windows ?
Bonjour,
Normalement chaque composant Swing dispose d'une propriété locale et d'une propriété componentOrientation qui sont héritées des valeurs de l'application obtenues soit depuis le système au lancement de l'application soit via les paramètres de la ligne de commande ou même en restaurant les préférences utilisateur au démarrage de cette même application. En Java, la langue et le pays sont définis dans la classe java.util.Locale, cette classe influe sur l'affichage des dates et nombres ainsi que l'orientation des composants et de l'UI.
Par exemple, si ton application fonctionne sur un système en Français avec la Locale fr_FR (Français variante de France) ou fr_DZ (Français variante d’Algérie), alors chacun des composants de ton UI hérite de cette locale et de l'orientation qui va avec. Cela veut dire aussi que si tu lances la même application sur un système Arabe ou Hébreu, sans meme que tu changes une ligne de code, tu vas avoir une bonne partie sinon toute l'interface qui sera affichée en miroir (chose qu'il faut penser a prendre en compte si tu dois distribuer ton app dans d'autres pays ou même si tu restes en Algérie mais si tu as des postes dont l'OS est configuré pour afficher/saisir de l'Arabe au lieu du Français).
Cependant, il t'est tout a possible de forcer manuellement un ou plusieurs composants a avoir la locale et l'orientation que tu souhaites. Par exemple :
Ici le second champs de saisie sera avec la locale arabe (pas de variante de pays, j'ai mis en commentaire la variante algérienne) et avec une orientation de droite vers la gauche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 import java.awt.ComponentOrientation; import java.util.Locale; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; public final class Main { private static void startUI() { final Locale arabic = new Locale("ar"); // final Locale arabic = new Locale("ar", "DZ"); final JTextField field1 = new JTextField(); final JTextField field2 = new JTextField(); field2.setLocale(arabic); field2.setComponentOrientation(ComponentOrientation.getOrientation(arabic)); final Box box = new Box(BoxLayout.Y_AXIS); box.setBorder(new EmptyBorder(3, 3, 3, 3)); box.add(field1); box.add(Box.createVerticalStrut(3)); box.add(field2); final JFrame frame = new JFrame("Test"); frame.setContentPane(box); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public static void main(String... args) { SwingUtilities.invokeLater(Main::startUI); } }
Attention, cela n’empêche pas la saisie de caractères latins ou autres ; juste que cela affiche le curseur du bon cote du champs pour l'arabe et insère les caractères dans la bonne direction. Si tu veux restreindre en plus le champs des saisies aux caractères arabes, il te faut :
- Soit mettre un DocumentListener sur le champ textuel pour filtrer les caractères non valides lors de la saisie.
- Soit utiliser a la place un JFormattedTextField avec les bonnes règles de validation.
EDIT - et j'oubliais au cas ou, si les caractères arabes ne s'affichent pas correctement, c'est qu'il y a un soucis avec la police utilisée par le champs texte. Il faudra donc en spécifier une autre si besoin si ce soucis survient.
EDIT 2 - voir aussi un vieux post sur ce sujet Caractère Arabe via JTextField
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager