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

时间:2012-12-19 21:00:05

标签: java swing custom-component jtextarea

我们想要将JComboBox中的一些字词添加到JTextArea,但我们希望这些字词为块。

我的意思是当用户尝试从该块中删除一个字母时,整个块将被删除。

示例:

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

我们怎么能这样做?

3 个答案:

答案 0 :(得分:1)

您可以将customEditorKit附加到jetTextPane,如下所示:
1.扩展EditorKit并覆盖ViewFactory以返回CustomViewFactory的实例
2.覆盖实现create的{​​{1}}中的方法CustomViewFactory并返回
BoxView,ComponentView,IconView(如果要添加一些图标+文本)等等。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如评论中所述,您可以使用JTextPaneComponent添加到文字区域。然后它总是被视为一个完整的词。这是一个例子:

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);
    }
}