0

JComboBoxから aにいくつかの単語を追加したいJTextAreaのですが、これらの単語をブロックにしたいのです。

つまり、ユーザーがこのブロックから文字を削除しようとすると、ブロック全体が削除されます。

例:

ブロック語を「タイトル」とすると、このブロックが にある場合はJTextArea、1 文字として扱います。

どうすればそれができますか?

4

3 に答える 3

1

のドキュメントを取得し、JTextAreaを追加しDocumentFilterます。イベントのオフセットがブロックテキスト内にあるかどうかを確認し、イベントをスキップします(削除または挿入)

于 2012-12-20T05:51:13.350 に答える
1

おそらく、次のように customEditorKit をjetTextPaneにアタッチできます:
1. CustomViewFactory のインスタンスを返すように拡張EditorKitおよびオーバーライドします 。 2. BoxView、ComponentView、IconView (アイコン + テキストを追加する場合) などを実装して返すメソッドをオーバーライドします。ViewFactory
createCustomViewFactoryViewFactory

于 2012-12-19T22:07:43.403 に答える
0

コメントに記載されているように、テキストの領域にJTextPanea を追加するために使用できComponentます。その後、常に単語全体として扱われます。次に例を示します。

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);
    }
}
于 2012-12-19T21:43:44.683 に答える