Linewrap在JTextPane中无法使用阿拉伯字母

时间:2014-12-15 13:02:32

标签: arabic jtextpane letter linewrap

我想在包含阿拉伯语文本的jtextpane中强制换行。 虽然自动启用了linewrap,但我的jtextpane不会对文本进行换行。

    import java.awt.*;
	import javax.swing.*;
	import javax.swing.GroupLayout.Alignment;
	import javax.swing.text.*;

	import static javax.swing.ScrollPaneConstants.*;	

	public class LineWrapTest {
		
		private JFrame frame = new JFrame();
		private String text1 =" أكرة القدم هي رياضة جماعية تلعب بين فريقين يتكون كل منهما من 11 لاعب بكرة مُكوَّرة. يلعب كرة القدم 250 مليون لاعب في أكثر من 200 دولة حول العالم، فهي بهذا الرياضة الأكثر شعبية وانتشاراً في العالم\n";
		private String text2 ="لذي يحرز أهدافاً أكثر يكون هو الفائز. إذا أحرز الفريقان أهدافاً متعادلة في نهاية المباراة، فتكون نتيجة المباراة إما التعادل أو تدخل المباراة في نظام الوقت الإضافي و/أو الضربات الترجيحية ويعتمد ذلك على نظام البطولة. وضعت قوانين ً\n";
		private String text3 ="كرة القدم في سنة 1863. يترأس لعبة كرة القدم دولياً الإتحاد الدولي لكرة القدم (الفيفا). تنظم بطولة كأس عالم لهذه الرياضة مر";
		private Document doc = null;
		private JTextPane textPane = new JTextPane();
		private JScrollPane scrollPane = null;
		private JPanel pane1 = new JPanel();
		private JPanel pane2 = new JPanel();
		
		LineWrapTest() throws BadLocationException {		    
			pane1.setBackground(Color.blue);
			pane2.setBackground(Color.green);
			pane1.setPreferredSize(new Dimension(10,10));
			pane2.setPreferredSize(new Dimension(10,10));			
			
			StyleContext context = new StyleContext();
		    Style style = context.getStyle(StyleContext.DEFAULT_STYLE);
		    StyleConstants.setAlignment(style, StyleConstants.ALIGN_RIGHT);
		    StyleConstants.setFontSize(style, 14);
		    StyleConstants.setSpaceAbove(style, 40);
		    StyleConstants.setSpaceBelow(style, 4);
			doc = new DefaultStyledDocument(context);
			
			//generate some text
			for(int i=0;i<10;i++) {		    
				doc.insertString(doc.getLength(), text1, style);
				doc.insertString(doc.getLength(), text2, style);
				doc.insertString(doc.getLength(), text3, style);
			}
			textPane.setDocument(doc);
			
			//make textpane scrollable
			scrollPane 	= new JScrollPane(textPane);
			createAndShowFrame();
		}		
		private void createAndShowFrame() {
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.setSize(new Dimension(200,200));
			frame.add(scrollPane, BorderLayout.CENTER);
			frame.add(new JButton("north"), BorderLayout.NORTH);
			frame.add(new JButton("south"), BorderLayout.SOUTH);
			frame.add(pane1, BorderLayout.WEST);
			frame.add(pane2, BorderLayout.EAST);
			frame.setVisible(true);
		}		
		public static void main (String [] args) throws BadLocationException {
			new LineWrapTest();
		}}

有关如何强制我的jtextpane对文本进行换行的任何想法?错误在哪里?

1 个答案:

答案 0 :(得分:3)

尝试在文本组件中启用从右到左的方向;没有这个Spring拒绝包装文本,因为它会包装错误的一面:

textPane.setComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT )

如果您需要混合RTL和LTR文本,请参阅此处:https://docs.oracle.com/javase/tutorial/i18n/text/bidi.html