我的程序有一排按钮。根据当前具有焦点的组件启用或禁用这些按钮。
至少应该是这样。我不知道怎么做。至少不恰当。以下是我的想法:
似乎第二种方法是可行的,因为它更集中,但是可能还有另一种更好的方法吗?
编辑: 这就是我最终做的事情:
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
{
public void eventDispatched(AWTEvent e)
{
if (e.getID() == 1004) //FOCUS_GAINED
{
if (Main.getGui().getActiveDocument() != null)
{
close.setEnabled(true);
save.setEnabled(true);
send.setEnabled(true);
if (e.getSource() instanceof Element)
{
addChapter.setEnabled(true);
delete.setEnabled(true);
superscript.setEnabled(true);
subscript.setEnabled(true);
if (e.getSource() instanceof Title)
{
if (((Title) e.getSource()).getChapter().getType() == 0)
{
addQuestion.setEnabled(true);
addListElement.setEnabled(false);
}
else
{
addListElement.setEnabled(true);
addQuestion.setEnabled(false);
}
addAnswer.setEnabled(false);
}
else if (e.getSource() instanceof Question)
{
addQuestion.setEnabled(true);
if (((Question) e.getSource()).getAnswerCount() < 5)
{
addAnswer.setEnabled(true);
}
else
{
addAnswer.setEnabled(false);
}
addListElement.setEnabled(false);
}
else if (e.getSource() instanceof Answer)
{
addQuestion.setEnabled(true);
if (((Answer) e.getSource()).getQuestion().getAnswerCount() < 5)
{
addAnswer.setEnabled(true);
}
else
{
addAnswer.setEnabled(false);
}
addListElement.setEnabled(false);
}
else if (e.getSource() instanceof ListElement)
{
addListElement.setEnabled(true);
addQuestion.setEnabled(false);
addAnswer.setEnabled(false);
}
}
else
{
addChapter.setEnabled(false);
addQuestion.setEnabled(false);
addAnswer.setEnabled(false);
addListElement.setEnabled(false);
delete.setEnabled(false);
superscript.setEnabled(false);
subscript.setEnabled(false);
}
}
else
{
close.setEnabled(false);
save.setEnabled(false);
send.setEnabled(false);
addChapter.setEnabled(false);
addQuestion.setEnabled(false);
addAnswer.setEnabled(false);
addListElement.setEnabled(false);
delete.setEnabled(false);
superscript.setEnabled(false);
subscript.setEnabled(false);
}
}
}
}, AWTEvent.FOCUS_EVENT_MASK);