2014-12-15 12 views
-1

아랍어 텍스트가 포함 된 jtextpane에서 선 쇄선을 강제로 적용하고 싶습니다. linewrap이 자동으로 활성화 되어도 jtextpane은 텍스트를 다시 래핑하지 않습니다.아랍어 문자가있는 JTextPane에서 선 괘선이 작동하지 않습니다.

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

 
\t import static javax.swing.ScrollPaneConstants.*; \t 
 

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

텍스트를 linewrap 내 JTextPane가 강제하는 방법에 어떤 아이디어? 실수는 어디 있습니까?

+0

이 있습니까? 그렇다면 어떤 캐릭터를 우주에 사용합니까? –

+0

@Aaron : 내가 아라비아 인이 아니기 때문에 나는 확실하지 않습니다. 예를 들어, http://www.commune-tunis.gov.tn/publish/content/ – Ramses

+0

BTW에서 텍스트를 사용했는데, 아랍어가 아닌 문자 나 텍스트를 사용할 때 아무런 문제가 없습니다. 렌더링 문제입니까? – Ramses

답변

3

텍스트 구성 요소에서 오른쪽에서 왼쪽 방향을 사용하도록 설정하십시오. 이 봄이 잘못된 측면에 포장 것이기 때문에 텍스트 줄 바꿈을 거부하지 않고 :

textPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT) 

당신이 RTL 및 LTR 텍스트를 혼합해야하는 경우 여기를 참조 : 그 텍스트에 공백이 https://docs.oracle.com/javase/tutorial/i18n/text/bidi.html

+0

참조 : https://docs.oracle.com/javase/tutorial/i18n/text/bidi.html –