Маркиране за програмист, но не и за потребител

Създавам програма, в която трябва да мога да редактирам функцията за осветяване на JTextArea чрез моя код, но не искам потребителят да може да осветява чрез мишката. Това, или имам нужда от някакъв начин да мога да рисувам върху JTextArea ръчно (за да изглежда като подчертаване).

Наистина все още нямам нищо подходящо за това, защото нямам представа как да го внедря.

Редактиране: Знам как да рисувам върху текста, но имам нужда рисуването да е прозрачно като подчертаването.


person Collin Shoop    schedule 18.03.2013    source източник
comment
вижте също Маркирайте един конкретен ред/ред в JTextArea   -  person tenorsax    schedule 19.03.2013


Отговори (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.
    }
    }
person Sharad Tank    schedule 18.03.2013

Не искам потребителят да може да маркира чрез мишката

Това се нарича "селекция". Можете да деактивирате това на текстов компонент, като използвате персонализирана каретка:

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();
            }
        });
    }
}
person camickr    schedule 18.03.2013

Вижте интерфейса Highlighter.HighlightPainter, това лесно (съмнително) ви позволява да промените външния вид на акцента.

Има някои конкретни реализации, но вие можете да дефинирате свои собствени.

person Mordechai    schedule 18.03.2013