当前位置: 首页 > 知识库问答 >
问题:

如何在JTextArea或JTextPane中显示多个carets

邵诚
2023-03-14

我想使用JText区或JTextPane作为代码更改播放器,代码更改和插入符号移动记录在文本文件中。但问题是,它是从支持多选的编辑器记录的,因此一次有多个插入符号位置。

可以在JTextArea或JTextPane中显示多个carets吗?

我尝试使用JTextPane并将代码呈现为超文本标记语言,并插入了一些


共有2个答案

狄富
2023-03-14
匿名用户

一个支持多重选择的编辑器,

也许您应该使用< code >荧光笔来突出显示文本选择的多个区域:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class TextAndNewLinesTest extends JFrame
{
    public TextAndNewLinesTest()
        throws Exception
    {
        String text =
            "one two three four five\r\n" +
            "one two three four five\r\n" +
            "one two three four five\r\n" +
            "one two three four five\r\n" +
            "one two three four five\r\n";

        JTextPane textPane = new JTextPane();
        textPane.setText(text);
        JScrollPane scrollPane = new JScrollPane( textPane );
        getContentPane().add( scrollPane );

        Highlighter.HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter( Color.cyan );

        String search = "three";
        int offset = 0;

        int length = textPane.getDocument().getLength();
        text = textPane.getDocument().getText(0, length);

        while ((offset = text.indexOf(search, offset)) != -1)
        {
            try
            {
                textPane.getHighlighter().addHighlight(offset, offset + 5, painter); // background
                offset += search.length();
            }
            catch(BadLocationException ble) {}
        }
    }

    public static void main(String[] args)
        throws Exception
    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new TextAndNewLinesTest();
        frame.setTitle("Text and New Lines - Problem");
//      frame.setTitle("Text and New Lines - Fixed");
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.setSize(400, 120);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}

叶弘深
2023-03-14

像这样?

import javax.swing.*;
import javax.swing.plaf.TextUI;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultCaret;
import java.awt.*;
import java.util.Arrays;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        JFrame fr=new JFrame("Multi caret test");
        JTextArea ta=new JTextArea("Test test test", 20, 40);
        MultiCaret c=new MultiCaret();
        c.setBlinkRate(500);
        c.setAdditionalDots(Arrays.asList(2,4,7));
        ta.setCaret(c);
        fr.add(ta);

        fr.pack();
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setLocationRelativeTo(null);
        fr.setVisible(true);
    }
}

class MultiCaret extends DefaultCaret {
    private List<Integer> additionalDots;

    public void setAdditionalDots(List<Integer> additionalDots) {
        this.additionalDots = additionalDots;
    }

    public void paint(Graphics g) {
        super.paint(g);

        try {
            TextUI mapper = getComponent().getUI();
            for (Integer addDot : additionalDots) {
                Rectangle r = mapper.modelToView(getComponent(), addDot, getDotBias());

                if(isVisible()) {
                    g.setColor(getComponent().getCaretColor());
                    int paintWidth = 1;
                    r.x -= paintWidth >> 1;
                    g.fillRect(r.x, r.y, paintWidth, r.height);
                }
                else {
                    getComponent().repaint(r);
                }
            }
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }

}
 类似资料:
  • 问题内容: 显示日语字符时,JTextArea的行为很奇怪- 我得到了众所周知的空白矩形而不是汉字。最奇怪的是,JTextField完美地显示了它们(在两种情况下,我都使用“ Tahoma”字体家族)。另外,如果我输入以下代码: …在我将日语字符串写入问题文本区域之前,它显示汉字! PS对不起,我的英语。 Upd: 我正在使用Windows 问题答案: 问题在于JTextArea使用的默认字体与J

  • 在我的REST API补丁操作中,我使用的是v3 我试图为我的补丁操作添加更多的示例作为swagger模式。 请求主体: 目前我有以下类的请求模型。 在PatchOperation.java中 @补丁 有没有办法,我可以为getOP、getPath和getValue方法添加多个示例?谢谢你。

  • 我有两种方法:和。它们都为中选定的文本(前景或背景)上色。现在,我想有另一种方法,将整个文本设置回正常(黑色前景和白色背景)<我该怎么做?

  • 问题内容: 有没有办法像JTextField一样为JTextArea创建水平居中的文本? 有没有办法用多行文本区域完成相同的事情?我用JTextArea找不到方法,所以还有其他选择吗?JTextPane?如果是这样,怎么办? 问题答案: 您需要使用JTextPane并使用属性。以下应该使所有文本居中: 编辑: 据我所知,不支持垂直居中。以下是一些可能会有用的代码:JTextPane的垂直对齐

  • 问题内容: 我可以将a的文本更改为粗体(附加文本),然后再恢复为普通文本,是否仅将粗体文本显示为粗体,其余部分正常显示? 还可以将其内容另存为RTF文档吗? 问题答案: 不,您要找的是JEdi​​torPane 它支持HTML(3.2?),可让您使用(和其他较早的标记)提供富文本格式。 编辑 :根据我上面引用的javadoc,JEditorPane还支持有限的RTF。不要忘记将MIME更改为

  • 我在一个非常简单的GUI中有一个JTextPane,我将它用作学习Java的游戏的输出控制台,我(尝试)将它与Windows类中的append方法一起使用,从另一个类(程序本身)或从command reader类调用它。理论上,它应该输出我输入的命令,在下几行中,它的输出来自所述程序。 另外,这里有一些示例输出 在调试过程中,我看到为Swing/AWT创建了一个线程,但我根本不了解线程,所以我只希