JComboBox
から aにいくつかの単語を追加したいJTextArea
のですが、これらの単語をブロックにしたいのです。
つまり、ユーザーがこのブロックから文字を削除しようとすると、ブロック全体が削除されます。
例:
ブロック語を「タイトル」とすると、このブロックが にある場合はJTextArea
、1 文字として扱います。
どうすればそれができますか?
JComboBox
から aにいくつかの単語を追加したいJTextArea
のですが、これらの単語をブロックにしたいのです。
つまり、ユーザーがこのブロックから文字を削除しようとすると、ブロック全体が削除されます。
例:
ブロック語を「タイトル」とすると、このブロックが にある場合はJTextArea
、1 文字として扱います。
どうすればそれができますか?
のドキュメントを取得し、JTextArea
を追加しDocumentFilter
ます。イベントのオフセットがブロックテキスト内にあるかどうかを確認し、イベントをスキップします(削除または挿入)
おそらく、次のように customEditorKit をjetTextPaneにアタッチできます:
1. CustomViewFactory のインスタンスを返すように拡張EditorKit
およびオーバーライドします
。 2. BoxView、ComponentView、IconView (アイコン + テキストを追加する場合) などを実装して返すメソッドをオーバーライドします。ViewFactory
create
CustomViewFactory
ViewFactory
コメントに記載されているように、テキストの領域にJTextPane
a を追加するために使用でき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);
}
}