0

ボタンの列を持つプログラムがあります。これらのボタンは、現在フォーカスがあるコンポーネントに応じて有効または無効になります。

少なくともそうあるべきです。やり方がわかりません。少なくとも適切ではありません。ここに私の考えがあります:

  1. ボタンが有効かどうかをフォーカスが決定する各コンポーネントは、フォーカスの獲得/喪失イベントでボタンを有効/無効にします。キャッチ?ボタンをクリックしようとすると、ボタンも無効になります(フォーカスも失われるため)。私はおそらくそれを回避することができますが、それは物事を非常に複雑にします.
  2. フォーカス喪失イベントとフォーカス獲得イベントをリッスンし、それぞれボタンを無効化および有効化するグローバル リスナーを作成します。

メソッド no2 はより集中化されているため、うまくいくようですが、もっと良い方法はありますか?

編集:これは私がやったことです:

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