Java 如果初始文本以换行符结尾,如何防止JTextPane重置字体设置?
我遇到了JTextPane的问题。我正在使用的代码设置了许多字体属性,如粗体、斜体等。但是,如果初始文本以一个换行符结尾,并且用户单击最后一行,或者发送到最后一行,则用户键入的任何其他文本都会显示默认字体设置 具体来说,本文的工作原理与我预期的一样:jTextPane.setText(String.format(“testthis”) 此文本没有:Java 如果初始文本以换行符结尾,如何防止JTextPane重置字体设置?,java,swing,jtextpane,sprint,Java,Swing,Jtextpane,Sprint,我遇到了JTextPane的问题。我正在使用的代码设置了许多字体属性,如粗体、斜体等。但是,如果初始文本以一个换行符结尾,并且用户单击最后一行,或者发送到最后一行,则用户键入的任何其他文本都会显示默认字体设置 具体来说,本文的工作原理与我预期的一样:jTextPane.setText(String.format(“testthis”) 此文本没有: jTextPane.setText(String.format(“测试此%n%n”) 我认为JTrpBANE可以认为这是一个新的段落。 如果是的话,
jTextPane.setText(String.format(“测试此%n%n”) 我认为JTrpBANE可以认为这是一个新的段落。 如果是的话,我想 a、 )知道如何设置适用于整个JTextPane实例段落的通用字体 或 b)告诉JTrimPANE实例,将其所有可编辑区域考虑为一个段落。 这里有一个玩具程序来告诉你我的意思。如果运行此命令,并开始在文本末尾键入,则字体将是Swing实现的默认字体。 我还尝试设置JTextPane的文档模型,并在JTextPane构造函数中使用字体实例。结果是一样的 另一种替代方法是使用JTextArea实例,但这是一段非常复杂的代码,我不太愿意做出可能会破坏应用程序某些其他领域的更改,而不是我正在处理的领域
import javax.swing.*;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import java.awt.*;
public class JTextPaneExampleOne {
public static void main(String args[]) {
JFrame frame = new JFrame("JTextPane Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = frame.getContentPane();
JTextPane pane = new JTextPane();
String welcomeString = String.format("Welcome%n%n%nStranger!%n%n%n");
pane.setText( welcomeString );
pane.invalidate();
SimpleAttributeSet attributeSet = new SimpleAttributeSet();
StyleConstants.setBold(attributeSet, true);
StyleConstants.setItalic(attributeSet, true);
StyleConstants.setForeground(attributeSet, Color.red);
pane.setSelectionStart( 0 );
pane.setSelectionEnd( pane.getText().length() );
pane.setParagraphAttributes( attributeSet, true );
pane.setSelectionStart( pane.getText().length() );
pane.validate();
JScrollPane scrollPane = new JScrollPane(pane);
cp.add(scrollPane, BorderLayout.CENTER);
frame.setSize(400, 300);
frame.setVisible(true);
}
}
a、 )知道如何设置适用于整个JTextPane实例段落的通用字体
在这种情况下,您可以使用:
a、 )知道如何设置适用于整个JTextPane实例段落的通用字体
在这种情况下,您可以使用:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class JTextPaneExampleOne2 {
public Component makeUI() {
JTextPane pane = new JTextPane();
Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
Style body = pane.getStyledDocument().addStyle("body", def);
StyleConstants.setBold(body, true);
StyleConstants.setItalic(body, true);
StyleConstants.setForeground(body, Color.RED);
pane.setLogicalStyle(body);
String welcomeString = String.format("Welcome%n%n%nStranger!%n%n%n");
pane.setText(welcomeString);
// SimpleAttributeSet attributeSet = new SimpleAttributeSet();
// StyleConstants.setBold(attributeSet, true);
// StyleConstants.setItalic(attributeSet, true);
// StyleConstants.setForeground(attributeSet, Color.RED);
//
// pane.setSelectionStart(0);
// pane.setSelectionEnd(pane.getText().length());
// pane.setParagraphAttributes(attributeSet, true);
// pane.setSelectionStart(pane.getText().length());
return new JScrollPane(pane);
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame f = new JFrame("JTextPane Example");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new JTextPaneExampleOne2().makeUI());
f.setSize(400, 400);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}