2011-06-25 10 views
9

Mam JScrollPane z JTextArea wewnątrz i próbuję ustawić orientację JTextArea z prawej na lewą, więc tekst w środku rozpocznie się od prawej i przewijania będzie po lewejJak ustawić orientację JTextArea od prawej do lewej (wewnątrz JOptionPane)

próbowałem następujących ale nie wpływa na kierunek orientacji:

txt.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
txt.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
txt.setAlignmentX(JTextArea.RIGHT_ALIGNMENT); 

EDIT:

dwie odpowiedzi camickr & trashgod pod warunkiem działa dobrze, ale nie w moim programie, w którym używam mojego JTextArea jako obiektu wiadomości i przekazać go do OptionPane.

EDIT2:

Pomyślałem, że setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); nie działa, jeśli stosuje się go na zawartość JOptionPane .. czy istnieje alternatywne rozwiązanie tego problemu?

Podobny do mojego kodu:

import java.awt.*; 
import java.util.*; 
import javax.swing.*; 
public class TextArea extends JPanel 
{ 
    private JTextArea txt = new JTextArea(); 
    public TextArea() 
    { 
     setLayout(new GridLayout()); 
     txt.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
     JScrollPane scroll = new JScrollPane(txt); 
     scroll.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
     setPreferredSize(new Dimension(200,200)); 
     this.add(scroll); 
    } 
    private void display() 
    { 
     Object[] options = {this}; 
     JOptionPane pane = new JOptionPane(); 
     int option = pane.showOptionDialog(null, null, "Title", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]); 
    } 
    public static void main(String[] args) 
    { 
     new TextArea().display(); 
    } 
} 
+0

zamieścić swoje SSCCE !!!! – camickr

+0

Wreszcie SSCCE, które powinno być wysłane z każdym pytaniem. Zobacz moją aktualizację. – camickr

Odpowiedz

7

i przewijania będzie na lewo

scrollPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 

więc tekst wewnątrz niej rozpocznie się od prawej

textArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 

Tekst rozpoczyna się po prawej stronie, ale nadal jest dołączany do końca w trakcie pisania, zamiast wstawiania go na początku wiersza.

Aktualizacja:

Nie wiem, dlaczego to nie działa w panelu opcji. Oto proste rozwiązanie:

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

public class Test 
{ 
    public static void main(String args[]) throws Exception 
    { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JTextArea textArea = new JTextArea(4, 20); 
       JScrollPane scrollPane = new JScrollPane(textArea); 
       JPanel panel = new JPanel(); 
       panel.add(scrollPane); 

       scrollPane.addAncestorListener(new AncestorListener() 
       { 
        public void ancestorAdded(AncestorEvent e) 
        { 
         JScrollPane scrollPane = (JScrollPane)e.getComponent(); 
         scrollPane.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
        } 

        public void ancestorMoved(AncestorEvent e) {} 
        public void ancestorRemoved(AncestorEvent e) {} 
       }); 

       JOptionPane.showMessageDialog(null, panel); 
      } 
     }); 
    } 
} 
+0

nadal po prawej stronie –

+0

Działa dobrze dla mnie, zamieść swoje SSCCE! – camickr

+0

@camickr skąd mogę zobaczyć moją SSCCE? –

7

To wydaje się działać.

enter image description here

import java.awt.ComponentOrientation; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.util.Locale; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

/** @see http://stackoverflow.com/questions/6475320 */ 
public class RTLTextArea extends JPanel { 

    private static final String s = "مرحبا العالم"; 
    private JTextArea jta = new JTextArea(7, 5); 
    private Locale arabic = new Locale("ar", "KW"); 
    private ComponentOrientation arabicOrientation = 
     ComponentOrientation.getOrientation(arabic); 

    public RTLTextArea() { 
     this.setLayout(new GridLayout()); 
     this.add(new JScrollPane(jta)); 
     this.applyComponentOrientation(arabicOrientation); 
     for (int i = 0; i < 8; i++) { 
      jta.append(s + "\n"); 
     } 
    } 

    private void display() { 
     JFrame f = new JFrame("RTLTextAre"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new RTLTextArea().display(); 
      } 
     }); 
    } 
} 
+0

Korekty powitania z tekstem arabskim. – trashgod

+0

To działa bardzo dobrze, ale nie wiem, dlaczego nie działa w moim programie:/Muszę ponownie sprawdzić mój kod ponownie –

+0

I dlatego właśnie poprosiłeś o opublikowanie swojego SSCCE! Nie oczekuj, że napiszemy kod, już ci mówiłem, że wszystko działa dobrze. Nie wierzę w kodowanie karmienia łyżką, gdy wszystko, co musisz zrobić, to wypróbować pojedynczą linię kodu. Nie uczysz się niczego w ten sposób. – camickr

2

ta linia

setComponentOrientation (ComponentOrientation.RIGHT_TO_LEFT)

zmiana prawidłowa kolejność słów.

mam ten wynik

kilobajtów 80.78

Powiązane problemy