0

コードを介してハイライト機能を編集できるようにする必要があるプログラムを作成していJTextAreaますが、ユーザーがマウスを介してハイライトできるようにしたくありません。それ、または手動でペイントできる方法が必要ですJTextArea(ハイライトのように見えるようにするため)。

実装方法がわからないため、これについてはまだコードに関して何も進んでいません。

編集:テキストの上にペイントする方法は知っていますが、強調表示のようにペイントを透明にする必要があります。

4

3 に答える 3

3

ユーザーがマウスでハイライトできるようにしたくない

それは「選択」と呼ばれます。カスタムCaretを使用して、テキストコンポーネントでこれを無効にできます。

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

public class NoTextSelectionCaret extends DefaultCaret
{
    public NoTextSelectionCaret(JTextComponent textComponent)
    {
        setBlinkRate( textComponent.getCaret().getBlinkRate() );
        textComponent.setHighlighter( null );
    }

    @Override
    public int getMark()
    {
        return getDot();
    }

    private static void createAndShowUI()
    {
        JTextField textField1 = new JTextField("No Text Selection Allowed");
        textField1.setCaret( new NoTextSelectionCaret( textField1 ) );
        textField1.setEditable(false);

        JTextField textField2 = new JTextField("Text Selection Allowed");

        JFrame frame = new JFrame("No Text Selection Caret");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(textField1, BorderLayout.NORTH);
        frame.add(textField2, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
于 2013-03-18T23:35:32.637 に答える
3

このコードから始めることができます。ユーザーが指定した単語を検索し、String findstrテキスト領域全体でこの単語を強調表示します。テキスト領域のコンテンツの最後に到達するまで、テキスト領域内の特定の単語を複数回検索して強調表示するために使用できます。

String findstr = findTextField.getText().toUpperCase(); // User Input Word to find
int findstrLength = findstr.length();                   
String findtextarea = textarea.getText().toUpperCase(); // TextArea Content
Highlighter h = textarea.getHighlighter();
h.removeAllHighlights();
try
    {
        int index=0;
         while(index>=0) {
        index = findtextarea.indexOf(findstr,index);
        if (index > 0) {
           h.addHighlight(index,index+findstrLength, DefaultHighlighter.DefaultPainter);
        }
        index++; // try adding this to allow you to look for the next index.
    }
    }
于 2013-03-18T22:27:18.860 に答える
1

Highlighter.HighlightPainter簡単に(疑わしい)ハイライトの外観を変更できるインターフェイスを参照してください。

いくつかの具体的な実装がありますが、独自のものを定義できます。

于 2013-03-18T22:06:36.810 に答える