在每篇文章中回答一个问题"如何将字符串附加到JEditorPane?" 是这样的
jep.setText(jep.getText + "new string");
Run Code Online (Sandbox Code Playgroud)
我试过这个:
jep.setText("<b>Termination time : </b>" +
CriterionFunction.estimateIndividual_top(individual) + " </br>");
jep.setText(jep.getText() + "Processes' distribution: </br>");
Run Code Online (Sandbox Code Playgroud)
结果我得到了"终止时间:1000"而没有"进程分发":
为什么会这样?
我一直在寻找这个,到目前为止,我能够想出的是如何创建一个样式并将其应用于这样的角色:
StyledDocument doc = (StyledDocument) new DefaultStyledDocument();
JTextPane textpane = new JTextPane(doc);
textpane.setText("Test");
javax.swing.text.Style style = textpane.addStyle("Red", null);
StyleConstants.setForeground(style, Color.RED);
doc.setCharacterAttributes(0, 1, textpane.getStyle("Red"), true);
Run Code Online (Sandbox Code Playgroud)
如果您的文档中只有少量样式并希望按名称存储它们,以便以后可以轻松应用它们,这将非常有用.在我的应用程序中,我希望能够为文本中的每个字符独立设置前景色(仅少数值之一)和背景色(灰度,许多不同的值).为此创建潜在的数百/数千种不同风格似乎是一种巨大的浪费.有没有办法设置这些属性,而不必每次都创建一个新的样式?如果我只需渲染文本会更容易,但我也需要使其可编辑.有没有办法做到这一点JTextPane,还是有另一个提供此功能的swing类?
如何在JTextPane中实现自动换行?
我试图准确理解它是如何工作的,以便我可以修改行为.现在,如果我在JScrollPane中有一个标准的JTextPane,它会在空格处中断文本,但不会在长单词内部 - 如果有一个文本字符串没有比窗口宽的空格,它将不会换行/中断将出现一个水平滚动条.随着文本宽度的增加,ParagraphView的宽度(通过getWidth())会增加以保存文本.
Lapitsky的这篇文章说LabelView.getBreakWeight()返回带有空格的标签的View.ExcellentBreakWeight和没有空格的标签的View.GoodBreakWeight(GlyphView.java中的代码似乎证实了这一点),为什么它不会破坏?它是以某种方式返回BadBreakWeight而不是GoodBreakWeight?还是有一些布局问题?还是有错误?
这是一些代码(为了您的观看乐趣):
//somewhere inside JPanel or JFrame constructor
JTextPane textPane = new JTextPane();
JScrollPane scrollPane = new JScrollPane(textPane);
add(scrollPane);
Run Code Online (Sandbox Code Playgroud)
请注意,如果我取出滚动窗格并仅使用文本窗格(它只是在窗口外面时被剪切),它仍然不会换行.
Swing的javadoc似乎没有详细介绍一些对象(如JTextPane,View和相关对象)如何协同工作.是否还有关于此类课程设计的进一步文档,或许详细说明了每个课程的目的以及它们如何一起工作?它不公开吗?(或者我是唯一一个在这样的事情上遇到麻烦的人?或者说文档不足以限制一些典型的开发人员不会处理的事情?)
我正在尝试创建简单的IDE并基于我的JTextPane着色
我为源代码着色的方法是覆盖StyledDocument中的insertString和removeString方法.
经过多次测试,我已经完成了评论和关键词.
Q1:至于我的Strings着色,我根据这个正则表达式为我的字符串着色:
Pattern strings = Pattern.compile("\"[^\"]*\"");
Matcher matcherS = strings.matcher(text);
while (matcherS.find()) {
setCharacterAttributes(matcherS.start(), matcherS.end() - matcherS.start(), red, false);
}
Run Code Online (Sandbox Code Playgroud)
这种方式有99%的时间可用,除非我的字符串包含一个特定类型的字符串,其中有一个"\代码内部.这会弄乱我的整个颜色编码.任何人都可以纠正我的正则表达式来修复我的错误吗?
Q2:对于整数和十进制着色,基于此正则表达式检测数字:
Pattern numbers = Pattern.compile("\\d+");
Matcher matcherN = numbers.matcher(text);
while (matcherN.find()) {
setCharacterAttributes(matcherN.start(), matcherN.end() - matcherN.start(), magenta, false);
}
Run Code Online (Sandbox Code Playgroud)
通过使用正则表达式"\ d +",我只处理整数而不是浮点数.此外,作为另一个字符串的一部分的整数是匹配的,这不是我想要的IDE内部.哪个是用于整数颜色编码的正确表达式?
以下是输出的屏幕截图:

感谢您提前帮助!
我正在尝试用一个小的HTML-wysiwyg,JTextPane但是我无法BackgroundAction使用它.我使用setCharacterAttributes的StyledDocument的JTextPane,但它似乎有问题.视图还可以,但事实Document并非如此.
这是一个显示问题的小型演示代码.有2个JTextPane:
JTextPane并将其设置在第二个文本上- >虽然它们具有相同的文本,但它们不会显示相同的内容.
有没有办法在当前选定的文本上设置背景颜色并让JTextPane报告更新HTML文本?
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class TestDifferentStyles {
private void initUI() {
JFrame frame = new JFrame(TestDifferentStyles.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextPane textPane = new JTextPane();
final JTextPane textPane2 = new JTextPane();
textPane2.setEditable(false);
textPane.setContentType("text/html");
textPane2.setContentType("text/html");
textPane.setText("<html><head></head><body><p>Hello world</p></body></html>");
SimpleAttributeSet set = new …Run Code Online (Sandbox Code Playgroud) 我需要某种JTextField,它用一个样式块替换回车字符,该块用另一种字体,样式或颜色显示文本<New Line>.
例如,文字..
Dear Mr. Smith,\nblablabla...\nRegards...
Run Code Online (Sandbox Code Playgroud)
..将以一行JTextField显示给用户,这样:
亲爱的史密斯先生,<新线> blablabla ... <新线> 问候......
这些<New Line>应该是可选择的块,就像它是单个字符一样,并且可以使用单个退格键删除.按返回键将在插入位置添加<新线>.
我认为通过覆盖是可能的PlainDocument,但是我很难理解Document和EditorKit API.我需要一些关于这个的指示......
我没有任何异议使用JTextPane或JEditorPane只要它表现得像JTextField(一行,没有滚动条).
有什么建议?
我正在创建一个聊天应用程序.在这个聊天应用程序中,我必须使用Java Swing JTextPane来为某些特定字符串提供样式,例如用户的显示名称和消息的时间.这就是为什么我选择JTextPane了JTextArea.在JTextPane中,我无法追加String,所以我创建了一个String缓冲区来追加String,然后我就这样做了jTextPane.setText(stringBuffer.toString()).
这是我的问题:当我将一个字符串附加到JTextPanevia a时StringBuffer,会有一个延迟.如何在一个字符串中逐行追加一个字符串JTextPane?
我目前有一个JLabel嵌入式JTextPane使用这个:
import javax.swing.*;
import javax.swing.text.*;
public class MainFrame
{
JFrame mainFrame = new JFrame("Main Frame");
JTextPane textPane = new JTextPane();
public MainFrame()
{
String[] components = {"Title", "\n"};
String[] styles = {"LABEL_ALIGN", "LEFT_ALIGN"};
StyledDocument sd = textPane.getStyledDocument();
Style DEFAULT_STYLE = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
Style LEFT_STYLE = sd.addStyle("LEFT_ALIGN", DEFAULT_STYLE);
StyleConstants.setAlignment(LEFT_STYLE, StyleConstants.ALIGN_LEFT);
Style CENTER_STYLE = sd.addStyle("CENTER_ALIGN", DEFAULT_STYLE);
StyleConstants.setAlignment(CENTER_STYLE, StyleConstants.ALIGN_CENTER);
JLabel titleLbl = new JLabel("Title");
Style LABEL_STYLE = sd.addStyle("LABEL_ALIGN", DEFAULT_STYLE);
StyleConstants.setAlignment(LABEL_STYLE, StyleConstants.ALIGN_CENTER);
StyleConstants.setComponent(LABEL_STYLE, titleLbl);
for(int i = 0; i < components.length; …Run Code Online (Sandbox Code Playgroud)