Java 将一些单词作为块添加到JTextarea

Java 将一些单词作为块添加到JTextarea,java,swing,custom-component,jtextarea,Java,Swing,Custom Component,Jtextarea,我们希望将JComboBox中的一些单词添加到JTextArea中,但我们希望这些单词作为块 我的意思是,当用户试图从这个区块中删除一封信时,整个区块都将被删除 例如: 让块字为“Title”,那么当我们在JTextArea中有这个块时,我们将它作为一个字母处理 我们如何才能做到这一点?如评论中所述,您可以使用JTextPane向文本区域添加组件。然后它总是被当作一个完整的词。下面是一个例子: import java.awt.*; import java.awt.event.*; import

我们希望将
JComboBox
中的一些单词添加到
JTextArea
中,但我们希望这些单词作为块

我的意思是,当用户试图从这个区块中删除一封信时,整个区块都将被删除

例如:

让块字为“Title”,那么当我们在
JTextArea
中有这个块时,我们将它作为一个字母处理


我们如何才能做到这一点?

如评论中所述,您可以使用
JTextPane
向文本区域添加
组件。然后它总是被当作一个完整的词。下面是一个例子:

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

public class TextComponent extends Box{
    public TextComponent(){
        super(BoxLayout.Y_AXIS);
        final JTextPane textArea = new JTextPane();
        textArea.setAlignmentX(CENTER_ALIGNMENT);
        add(textArea);

        JButton addText = new JButton("Add Text");
        addText.setAlignmentX(CENTER_ALIGNMENT);

        addText.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JLabel text = new JLabel("Original Text");
                text.setAlignmentY(0.8f);
                text.setOpaque(true);
                text.setBackground(Color.yellow);
                textArea.insertComponent(text);
            }});
        add(addText);
    }


    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new TextComponent());
        frame.pack();
        frame.setVisible(true);
    }
}

您或许可以将customEditorKit附加到如下位置:
1。扩展
EditorKit
并覆盖
ViewFactory
以返回CustomViewFactory的实例

2.重写
CustomViewFactory
中的
create
方法,该方法实现
ViewFactory
并返回
BoxView、ComponentView、IconView(如果要添加一些图标+文本)等

获取
JTextArea
的文档并添加
DocumentFilter
。检查事件偏移量是否在块文本中,并跳过事件(删除或插入)

可能不在JTextArea中,请尝试JTextPane或类似的方法。