2011-06-25 31 views
9

Tengo JScrollPane con JTextArea dentro de él y estoy tratando de establecer la orientación de JTextArea de derecha a izquierda para que el texto dentro de él comience desde la derecha y la barra de desplazamiento se encuentra a la izquierdaCómo establecer la orientación de JTextArea de derecha a izquierda (dentro de JOptionPane)

he intentado lo siguiente pero no afectará a la dirección de la orientación:

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

EDIT:

las dos respuestas camickr & trashgod proporcionó trabajo bien pero no en mi programa donde uso mi JTextArea como un objeto Mensaje y lo paso a OptionPane.

Edit2:

me di cuenta de que setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); no funciona si lo aplico sobre el contenido de JOptionPane .. ¿hay una solución alternativa a este problema?

Al igual que en mi código:

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

Publica tu SSCCE !!!! – camickr

+0

Finalmente, un SSCCE, que debe publicarse con cada pregunta. Ver mi actualización – camickr

Respuesta

7

y la barra de desplazamiento se encuentra a la izquierda

scrollPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 

por lo que el texto en su interior se iniciará desde la derecha

textArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 

El texto comienza en el lado derecho, pero aún se agrega al final mientras escribe en lugar de insertarse al principio de la línea.

Actualización:

No sé por qué no funciona en un panel de opciones. Aquí hay una solución simple:

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

aún a la derecha –

+0

Funciona bien para mí, publique su SSCCE. – camickr

+0

@camickr desde donde puedo ver mi SSCCE? –

7

Esto parece funcionar.

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

Correcciones de texto árabe de bienvenida. – trashgod

+0

Esto funciona muy bien, pero no sé por qué no funciona en mi programa:/Tengo que volver a verificar mi código –

+0

¡Y es por eso que se le pidió que publicara su SSCCE! No esperes que escriba el código, ya te dije que funcionó bien. No creo en el código de alimentación con cuchara cuando todo lo que tienes que hacer es probar una sola línea de código. No aprendes nada de esa manera. – camickr

2

esta línea

setComponentOrientation (ComponentOrientation.RIGHT_TO_LEFT)

cambio el orden correcto de las palabras.

tengo este resultado

KBytes 80.78

Cuestiones relacionadas