Обнаружение выделения текста в JTextArea - PullRequest
3 голосов
/ 11 февраля 2012

У меня есть JTextArea, и я определяю, выделен ли какой-либо текст, если нет ни одного, то два пункта меню отображаются серым цветом.Проблема, с которой я столкнулся, заключается в том, что когда я компилирую и открываю приложение, мне сначала нужно нажать на JTextArea, а затем пункты меню отображаются серым цветом, если нет, то даже если текст не выбран.Я использую следующий слушатель карет.

    textArea.addCaretListener(new CaretListener() {

        @Override
        public void caretUpdate(CaretEvent arg0) {
            int dot = arg0.getDot();
            int mark = arg0.getMark();
            if (dot == mark) {

                copy2.setEnabled(false);
                cut1.setEnabled(false);
            }
            else{
                cut1.setEnabled(true);
                copy2.setEnabled(true);
            }

        }
    });

Ответы [ 3 ]

5 голосов
/ 11 февраля 2012

Вы должны setEnabled(false) для каждого из этих пунктов меню при их создании.

1 голос
/ 11 февраля 2012

Вы можете определить логику включения / выключения для пунктов меню вырезания / копирования в отдельной функции и вызывать эту функцию при инициализации GUI, а также эту функцию будет вызываться при событии CaretUpdate (или, лучше, MouseReleased).

JTextArea textArea;
......
........
public void init()
{   
    ......
    ........
    textArea=new JTextArea();
    // add textArea to parent container
    // now initialize menu items state
    setEditingMenuItemsState();
    textArea.addCaretListener(new CaretListener()
    {
        @Override
        public void caretUpdate(CaretEvent arg0)
        {
            setEditingMenuItemsState();
        }
    });
    ......
    ........
}

public void setEditingMenuItemsState()
{
    String selectedText;

    if ( textArea == null ) selectedText = null;

    if ( selectedText == null || selectedText.isEmpty() )
    {
        copy2.setEnabled(false);
        cut1.setEnabled(false);
    }

    else
    {
        cut1.setEnabled(true);
        copy2.setEnabled(true);
    }
}
0 голосов
/ 24 января 2013

Вы можете использовать JtextField.setHighlighter (null);

...