3

簡単な GUI を作成する方法の例がいくつかあります。私が持っている質問は、これを行う適切な方法と考えられるものと、どちらの方法で行うことの理論的根拠は何ですか?

私は Eclipse で Window Builder Pro を使用しており、生成されるコードを調べています。どうやら Window Builder は、ビジュアル クラスのメイン メソッド内でコンポーネント (ボタンなど) をローカル変数として宣言することを好みます。ただし、Window Builder には、フィールドへの変換を可能にするボタンがあります。私が遭遇したほとんどの例は、フィールド宣言を好むようです。

また、多くの例は、 を拡張する別のクラスを作成する方がよいことを示していますJFrame。Window BuilderJFrameは、クラスのフィールドとして宣言するだけです。

また、多くのイベントまたは複数のハンドラーに対して単一のハンドラーを使用する必要があります。Window Builder は、各イベントの匿名ハンドラーを宣言します。

好ましいアプローチが何であるかを明確にしたいだけです。

4

2 に答える 2

8

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 つはより複雑な操作用です。

于 2012-10-07T19:56:06.617 に答える
1

@HovercraftFullOfEels は、あなたの質問に対してすでに非常に良い回答を提供しています。これに少しだけ追加したいと思います:

また、多くのイベントまたは複数のハンドラーに対して単一のハンドラーを使用する必要があります。Window Builder は、各イベントの匿名ハンドラーを宣言します。

の場合、多くのボタンに対して 1 つのハンドラーを使用する必要があるかどうかを尋ねていると思いますActionEvents。私の一般的な経験則は、どのボタンがクリックされたかを検出する switch if-else ステートメントを避けることです。各ボタンの動作が大幅に異なる場合は、通常、ボタンごとに個別の匿名内部クラスを作成します。

于 2012-10-07T20:09:15.653 に答える