检测JTextArea中的文本选择

我有一个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); } } }); 

创建它们时,应在每个菜单项上设置启用setEnabled(false)

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

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