标签: styleddocument

JTextPane附加一个新字符串

在每篇文章中回答一个问题"如何将字符串附加到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"而没有"进程分发":

为什么会这样?

java swing jtextpane styleddocument

33
推荐指数
2
解决办法
9万
查看次数

如何在JTextPane中将每个字符设置为不同的颜色/背景颜色?

我一直在寻找这个,到目前为止,我能够想出的是如何创建一个样式并将其应用于这样的角色:

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类?

java swing jtextpane jtextcomponent styleddocument

9
推荐指数
2
解决办法
1万
查看次数

如何在JTextPane中实现自动换行,如何让它包装一个没有空格的字符串?

如何在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和相关对象)如何协同工作.是否还有关于此类课程设计的进一步文档,或许详细说明了每个课程的目的以及它们如何一起工作?它不公开吗?(或者我是唯一一个在这样的事情上遇到麻烦的人?或者说文档不足以限制一些典型的开发人员不会处理的事情?)

java swing jtextpane word-wrap styleddocument

6
推荐指数
1
解决办法
1万
查看次数

哪个是用于数字和字符串的正确正则表达式?

我正在尝试创建简单的IDE并基于我的JTextPane着色

  • 字符串("")
  • 评论(//和/**/)
  • 关键词(公共,国际...)
  • 数字(像69这样的整数和1.5之类的浮点数)

我为源代码着色的方法是覆盖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内部.哪个是用于整数颜色编码的正确表达式?

以下是输出的屏幕截图: 在此输入图像描述

感谢您提前帮助!

java regex jtextpane styleddocument

6
推荐指数
1
解决办法
1184
查看次数

JTextPane文本背景颜色不起作用

我正在尝试用一个小的HTML-wysiwyg,JTextPane但是我无法BackgroundAction使用它.我使用setCharacterAttributesStyledDocumentJTextPane,但它似乎有问题.视图还可以,但事实Document并非如此.

这是一个显示问题的小型演示代码.有2个JTextPane:

  1. 我在第一个文本中设置了文本的背景颜色
  2. 我检索第一个文本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)

java swing jtextpane background-color styleddocument

5
推荐指数
1
解决办法
4310
查看次数

如何清除StyledDocument中的所有样式?

StyledDocument包含各种设置样式的方法。就像setCharacterAttributes一样。

但是我看不到任何删除样式的方法。

有没有?

java swing styleddocument

3
推荐指数
2
解决办法
1679
查看次数

带有样式块的JTextField

我需要某种JTextField,它用一个样式块替换回车字符,该块用另一种字体,样式或颜色显示文本<New Line>.

例如,文字..

Dear Mr. Smith,\nblablabla...\nRegards...
Run Code Online (Sandbox Code Playgroud)

..将以一行JTextField显示给用户,这样:

亲爱的史密斯先生,<新线> blablabla ... <新线> 问候......

这些<New Line>应该是可选择的块,就像它是单个字符一样,并且可以使用单个退格键删除.按返回键将在插入位置添加<新线>.

我认为通过覆盖是可能的PlainDocument,但是我很难理解Document和EditorKit API.我需要一些关于这个的指示......

我没有任何异议使用JTextPaneJEditorPane只要它表现得像JTextField(一行,没有滚动条).

有什么建议?

java swing jtextfield styleddocument

2
推荐指数
1
解决办法
590
查看次数

如何在java swing JTextPane中追加一个字符串?

我正在创建一个聊天应用程序.在这个聊天应用程序中,我必须使用Java Swing JTextPane来为某些特定字符串提供样式,例如用户的显示名称和消息的时间.这就是为什么我选择JTextPaneJTextArea.在JTextPane中,我无法追加String,所以我创建了一个String缓冲区来追加String,然后我就这样做了jTextPane.setText(stringBuffer.toString()).

这是我的问题:当我将一个字符串附加到JTextPanevia a时StringBuffer,会有一个延迟.如何在一个字符串中逐行追加一个字符串JTextPane

java swing jtextpane styleddocument

1
推荐指数
1
解决办法
9648
查看次数

在JTextPane中使JLable不可删除

我目前有一个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)

java swing jtextpane styleddocument

0
推荐指数
1
解决办法
59
查看次数