GUI コンポーネントをフィールドとして宣言する特定の理由はありますか?
プログラムのどこかでそのコンポーネントを参照する必要がある場合にのみ、これを行う必要があると思います。たとえば、これは通常、ほとんどの一般的な JLabels には当てはまらないため、使用場所で宣言して使用するのがおそらく最善です。ただし、多くの JButton および JTextComponent は別の場所で使用する必要があり、これらはおそらくプライベート クラス フィールドとして宣言するのが最適です。
また、ActionListener は匿名にする必要がありますか?
そうすることが理にかなっている場合のみ。明確にするために、多くの/最も高速な 1 回限りの ActionListener は匿名にする必要がありますが、より大きなものはプライベート 内部クラスにする必要があり、複雑で大きなものは個別のスタンドアロン クラスにする必要があります。感覚と経験以外に、これらを区別する簡単なテストを私は知りません。
私はEclipseでWindow Builder Proを使用しており、生成されているコードを調べています...
あなたが見習いの Swing コーダーである場合、Swing GUI の作成に慣れるまで、おそらくこのツールを少し脇に置きたいと思うでしょう。基礎となるライブラリ。それ以外の場合は、あなたが旅人であり、Swing のエキスパートである場合は、Swing を引き続き使用してください。
また、多くの例は、JFrame を拡張する別のクラスを作成する方がよいことを示しています。Window Builder は JFrame をクラスのフィールドとして宣言するだけです。
私が知っている Swing 分野のほとんどの専門家は、通常は JFrame をまったく拡張せず、必要に応じて JFrame オブジェクトを作成して使用するのが最善であると示唆しています。これにはいくつかの理由がありますが、第 1 の理由は、重要なメソッドを気付かずにオーバーライドするなどの意図しない副作用を避けるためです。これは、JComponent をオーバーライドしてint getX()
メソッドint getY()
を指定したときに発生しました。コンポーネントは本来あるべき場所にとどまることはありません!
また、多くのイベントまたは複数のハンドラーに対して単一のハンドラーを使用する必要があります。Window Builder は、各イベントの匿名ハンドラーを宣言します。
私が知っているほとんどの人は、単一のハンドラーを使用して単一のタイプのアクションを処理します。たとえば、電卓を作成している場合、すべての数字ボタンで共有される 1 つのハンドラーを作成し、さまざまなタイプの操作用に複数のハンドラーを作成するのが理にかなっています。1 つのハンドラーは、+、- などの基本的な数学操作用です。 、*、/、および 1 つはメモリ操作用で、1 つはより複雑な操作用です。