程序设计按钮焦点问题

时间:2013-11-12 23:29:26

标签: java user-interface focus jbutton

我的程序有一排按钮。根据当前具有焦点的组件启用或禁用这些按钮。

至少应该是这样。我不知道怎么做。至少不恰当。以下是我的想法:

  1. 每个具有焦点的组件确定是否启用按钮会在焦点获得/丢失事件上启用/禁用它。抓住?如果我试图点击它也会禁用该按钮(因为它也会失去焦点)。我可以也许解决它,但它使事情变得很复杂。
  2. 创建一个全局侦听器,侦听焦点丢失和焦点获取事件,然后分别禁用和启用按钮。
  3. 似乎第二种方法是可行的,因为它更集中,但是可能还有另一种更好的方法吗?

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

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

0 个答案:

没有答案