突出显示程序员而非用户

时间:2013-03-18 21:53:38

标签: java swing jtextarea highlighting caret

我制作了一个程序,我需要通过我的代码编辑JTextArea的突出显示功能,但我不希望用户能够通过鼠标突出显示。那个,或者我需要一些方法能够手动绘制JTextArea(看起来像突出显示)。

我还没有为此做任何代码明智的事情,因为我不知道如何实现它。

编辑:我知道如何在文字上绘画,但我需要这幅画像透明一样透明。

3 个答案:

答案 0 :(得分: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();
            }
        });
    }
}

答案 1 :(得分:2)

您可以从此代码开始。它在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.
    }
    }

答案 2 :(得分:1)

请参阅Highlighter.HighlightPainter界面,轻松(可疑),您可以更改突出显示的外观。

有一些具体的实现,但你可以定义自己的。