我的JScrollPane
内有JTextArea
,我正在尝试从右到左设置JTextArea的方向,因此其中的文本将从右侧开始,滚动条将在左侧< / p>
我尝试了以下但是它们并没有影响方向:
txt.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
txt.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
txt.setAlignmentX(JTextArea.RIGHT_ALIGNMENT);
修改
两个答案camickr&amp; trashgod提供的工作正常但不在我的程序中,我使用我的JTextArea作为对象Message并将其传递给OptionPane。
EDIT2:
我发现如果我将setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
应用于JOptionPane内容,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();
}
}
不起作用..是否有另一种解决此问题的方法?
与我的代码相似:
{{1}}
答案 0 :(得分:8)
,滚动条将位于左侧
scrollPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
所以里面的文字将从右边开始
textArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
文本从右侧开始,但在您键入时仍然会追加到末尾,而不是插入到行的开头。
更新
我不知道为什么它在选项窗格中不起作用。这是一个简单的解决方案:
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);
}
});
}
}
答案 1 :(得分:7)
这似乎有效。
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();
}
});
}
}
答案 2 :(得分:2)
这一行
setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)
更改单词的正确顺序。
我有这个结果
KBytes 80.78
答案 3 :(得分:0)
以下几行解决了我的问题:
jTextArea1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
jTextArea1.setText(<text>);
它们的作用是:
setComponentOrientation()
更改TextArea
的方向;并且,setText()
立即刷新TextArea
使其正确显示仅将ComponentOrientation
设置为RIGHT_TO_LEFT
本身是不够的。 repaint()
不会强制文本重新对齐。对我来说,一种快速的解决方案是更新TextArea的内容。这迫使文本重新对齐。