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