2016-08-12 3 views
0

Можно ли включить пространственную обертку в JTextPane?Как включить пространственную привязку строк в JTextPane?

Использование JTextArea не является вариантом, потому что мне нужно стилить контент.

+3

Это поведение по умолчанию JTextPane. То есть, если целое слово не будет вписываться в строку, оно будет завершено в предыдущем пространстве. Если у вас возникла проблема, отправьте свой [SSCCE] (http://sscce.org/), который демонстрирует проблему. – camickr

ответ

1

Это, как вы делаете JFrame по умолчанию с JTextPane и штриховой пленкой. Как сказал camickr, это поведение по умолчанию.

package test; 

import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JTextPane; 
import javax.swing.SwingUtilities; 
/** 
* 
* @author floz 
*/ 
public class Test { 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       final JFrame mainFrame = new JFrame("test"); 
       mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       final JTextPane field = new JTextPane(); 
       field.setText("qds qljsd qsld qlskd qlkds fqlk sdkf qlskdfqlk sdlf qsld ql sdf qlskd fqks lqksjd f"); 

       mainFrame.getContentPane().setLayout(new BorderLayout()); 
       mainFrame.getContentPane().add(field,BorderLayout.CENTER); 
       mainFrame.setSize(200,200); 
       mainFrame.setVisible(true); 
      } 
     }); 
    } 
} 
0

Вы можете добавить слушатель в документе JTextPane, что делает обертывание строки, как следует:

pane.getDocument().addDocumentListener(new DocumentListener() 
    { 

      @Override 
      public void insertUpdate(DocumentEvent e) 
      { 
       if(e.getOffset() >= pane.getSize().getWidth()/pane.getFont().getSize()) 
       { 
        String str = pane.getText(); 
        if(str.length() <= str.lastIndexOf(32)) 
        { 
          try 
          { 
           e.getDocument().insertString(str.lastIndexOf(32), "\n", pane.getCharacterAttributes()); 

          } catch (BadLocationException e1) 
          { 
           e1.printStackTrace(); 
          } 
        } 
       }     
      } 

      @Override 
      public void removeUpdate(DocumentEvent e) {} 

      @Override 
      public void changedUpdate(DocumentEvent e) {} 

    }); 
+2

Что делать, если размер рамки изменяется, что также приводит к изменению размера панели? Или что, если в текстовое поле вставлено несколько строк текста? Теперь разрыв жестко закодированных строк не позволит перенастроить текст. – camickr

+0

@camickr: Ну, тогда он должен поместить некоторые из себя в это ?! В вопросе не упоминалось об изменении размера. Я просто дал ему базовое представление об этом. –

+0

И поэтому, как правило, хорошей практикой является отделить модель от вида. – Sharcoux

Смежные вопросы