2014-04-09 4 views
1

JEditorPane은 그대로 텍스트를 JTextArea에 표시하고 싶습니다. JEditorPane을 사용하는 이유는 특정 텍스트 패턴 (a href)으로 링크를 만들고 싶기 때문입니다. 나는 JTextPane을 들여다 보았지만 쉬운 방법을 찾지 못했습니다. 텍스트는 채워져 있으므로 채우기 및 올바른 공백 수의 유지가 중요합니다. 디스플레이의 차이는 다음과 같다 : enter image description hereJTextArea와 같이 JEditorPane에 텍스트를 표시하려면 어떻게해야합니까?

내가 JEditorPane은 (좌측) JTextArea에서와 정확히 동일한 방식 텍스트를 표시하기 원한다. 어쩌면, 그것을하는 또 다른 방법이 있을까요? 1233과 같은 일부 텍스트에는 링크가 있고 관련 텍스트 리스너는 텍스트가 올바르게 표시되면 트리거됩니다.

코드 : 일반 텍스트를 사용하는 경우

import javax.swing.*; 
import javax.swing.text.JTextComponent; 
import java.awt.*; 

public class Test { 
    public static void main(String[] args)throws Exception { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 

    final static String sampleText= 
      "\n" + 
        " 1233 2001/16/07  This is test\n" + 
        "       With padding\n" + 
        "        more padding\n" + 
        "        and more padding"; 

    private static void createAndShowGUI() { 
     final JFrame frame = new JFrame("test"); 
     //final JTextComponent textComponent=new JTextArea(); 
     final JEditorPane textComponent=new JEditorPane(); 
     textComponent.setContentType("text/html"); 
     textComponent.setFont(textComponent.getFont().deriveFont(11.5f));// larger font 
     textComponent.setText(sampleText); 
     frame.getContentPane().add(textComponent); 
     frame.setPreferredSize(new Dimension(370,120)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

이 해결책이 될 수는 :

textComponent.setFont(new JTextArea().getFont().deriveFont(11.5f)); 

하지만 서식이 손실된다. 그래서, contentType을 "text/html"로 설정할 때 이것은 작동하지 않습니다.

textComponent.setFont(new JTextArea().getFont().deriveFont(11.5f)); 

이 힘 JEditorPane 사용 :

enter image description here

+3

+1은 단순히 고정 폭 글꼴을 사용 JTextArea에 – mKorbel

+1

에 대한 고정 폭 글꼴을 사용합니다 JEditorPane의 메소드 –

답변

1

솔루션에 상관없이 (JTextArea 여부 JEditorPane) 무엇 textComponent, 없다 : 나는 (심지어 Monospaced 글꼴 포함) 컨텐트 유형을 설정 한 JEditorPaneJTextArea과 같은 글꼴. 또한, <br>와 HTML 엔티티와 공백과 줄 바꿈을 대체 : (같은 모양) 때문에, 당신은 모두 같은 글꼴을 사용하시기 바랍니다에 대한

sampleText=sampleText.replaceAll("\n","<br>").replaceAll("\\s","&nbsp;");