检测JTextArea中的文本选择

时间:2012-02-11 18:03:23

标签: java swing user-interface jtextarea caret

我有一个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 个答案:

答案 0 :(得分:5)

创建这些菜单项时,您应该setEnabled(false)

答案 1 :(得分:1)

您可以在单独的函数中为剪切/复制菜单项定义启用/禁用逻辑,并在初始化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);
    }
}

答案 2 :(得分:-1)

你可以使用 JtextField.setHighlighter(NULL);