如何在 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);
}
});
}
}
是否可以在 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);
}
});
}
}