【问题标题】:How to enable space-based line-wrapping in JTextPane?如何在 JTextPane 中启用基于空间的换行?
【发布时间】:2016-08-12 07:04:48
【问题描述】:

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

使用 JTextArea 不是一个选项,因为我需要设置内容的样式。

【问题讨论】:

  • 这是 JTextPane 的默认行为。也就是说,如果整个单词不适合该行,则将其包装在前一个空格处。如果您遇到问题,请发布您的 SSCCE 来证明问题。

标签: java swing jtextpane word-wrap


【解决方案1】:

这是使用 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);
            }
        });
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果调整框架大小导致文本窗格也调整大小怎么办?或者如果将多行文本粘贴到文本窗格中怎么办?现在硬编码的换行符将阻止文本重新调整。
    • @camickr:那么他应该为此付出一些代价?!这个问题没有提到对调整大小的响应。我只是给了他一个解决这个问题的基本思路。
    • 这就是为什么将模型与视图分开通常是一种很好的做法。
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多