如何在 JTextPane 中启用基于 space 的换行?

How to enable space-based line-wrapping in JTextPane?

是否可以在 JTextPane 中启用基于 space 的换行?

不能使用 JTextArea,因为我需要设置内容的样式。

您可以向 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) {}

   });

这就是使用 JTextPane 和换行创建默认 JFrame 的方法。正如 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);
            }
        });
    }
}