0

我有一个具有一排按钮的程序。这些按钮的启用或禁用取决于当前具有焦点的组件。

至少他们应该是。我不知道该怎么做。至少不正确。以下是我的想法:

  1. 每个获得焦点的组件决定是否启用按钮将在焦点获得/丢失事件上启用/禁用它。抓住?如果我尝试单击它,它也会禁用该按钮(因为它也会失去焦点)。我也许可以解决它,但这会使事情复杂化很多。
  2. 创建一个全局侦听器,用于侦听失去焦点和获得焦点事件,然后分别禁用和启用按钮。

似乎方法 2 是可行的方法,因为它更加集中,但是否有另一种更好的方法?

编辑:这就是我最终做的:

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);
4

0 回答 0