我们确实需要解决方法,因为JTextField
填充了包含以下内容的文字:
Right to left text
,例如阿拉伯语,Latin numbers
和Latin text
然后JTextField
在意外的位置呈现文字部分
只有在
内的完整文本适合时才会向右呈现JTextField
我们用来复制的文字是:
صندوق ۴۰×۳۰ پایه دار وایرنگ میتر تک فاز
其他信息:
//
//like you see below code shows simple JTextField but
// once you resize the window smaller than the text Fits
// you experience dancing numbers
// but try to select part of text that is more fatal
//
//other info: below text is just name of a product added inside an accounting software
// we created but our users have match more render failures as we could reproduce.
//
package test;
import java.awt.ComponentOrientation;
public class JavaBug extends javax.swing.JFrame {
public static void main(String[] args) {
JavaBug frame = new JavaBug();
frame.show();
}
public JavaBug() {
javax.swing.JTextField textField = new javax.swing.JTextField();
textField.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
textField.setText("\u0635\u0646\u062F\u0648\u0642 \u06F4\u06F0×\u06F3\u06F0 \u067E\u0627\u06CC\u0647 \u062F\u0627\u0631 \u0648\u0627\u06CC\u0631\u0646\u06AF \u0645\u06CC\u062A\u0631 \u062A\u06A9 \u0641\u0627\u0632");
textField.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
getContentPane().add(textField);
pack();
this.setLocationRelativeTo(null); //enusre get showed at screen center
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
}
}
屏幕截图:just run,after resize
开发套件或运行时版本:
答案 0 :(得分:2)
你可以试试这个
import javax.swing.*;
import javax.swing.text.html.HTMLEditorKit;
import java.awt.*;
public class JavaBug extends javax.swing.JFrame {
public static void main(String[] args) {
JavaBug frame = new JavaBug();
frame.show();
}
public JavaBug() {
JTextPane textPane = new JTextPane();
textPane.setEditorKit(new HTMLEditorKit());
textPane.setText("<html><font size='+2'>\u0635\u0646\u062F\u0648\u0642 \u06F4\u06F0×\u06F3\u06F0 \u067E\u0627\u06CC\u0647 \u062F\u0627\u0631 \u0648\u0627\u06CC\u0631\u0646\u06AF \u0645\u06CC\u062A\u0631 \u062A\u06A9 \u0641\u0627\u0632</font></html>");
textPane.getDocument().putProperty("i18n", Boolean.TRUE);
JPanel noWrapPanel = new JPanel( new BorderLayout() );
noWrapPanel.add( textPane );
JScrollPane scrollPane = new JScrollPane( noWrapPanel );
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
/* without below right to left force there is an other bug when we press home and
* try to navigate to end using left key it will never get at end and fall back at start. kind of crazy bug */
java.util.Locale arabic = new java.util.Locale("ar", "KW");
ComponentOrientation arabicOrientation = ComponentOrientation.getOrientation(arabic);
textPane.applyComponentOrientation(arabicOrientation);
getContentPane().add(scrollPane);
pack();
this.setLocationRelativeTo(null); //enusre get showed at screen center
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
}
}