3

次のプロジェクトでは、軽量のデスクトップアプリであるSwingを使用します。

私はOracleのWebサイトでSwingチュートリアルを読んでいて、そのコツをつかみ始めました。

JFrame切り替える代わりに、 1つのJFrame内で作業して切り替える必要があると言われましたJPanels

あなたへの私の質問は次のようになります。

JPanelデザイン(またはそのテンプレート)をデザインモード(WYSIWYGエディター)で作成して呼び出すjframe.setContentPane(nameOfJPanel)ことはできますか、それともプログラムでコードで行うことができますか?

次に、コードを構造化するにはどうすればよいですか...新しいJPanelを動的に追加し、それらのイベントをイベントハンドラーにバインドすると、すべてのロジックとコードが数十のメソッドを持つ1つの巨大なクラスになります。どうすればいいのかわからないので、インターネット上に複数の(たとえば6つ以上の)パネルがある例をどこにも見つけることができません。

4

3 に答える 3

4

WYSIWYGへまたはWYSIWYGではない

これは、最良の場合には議論の余地のある質問です。

レイアウトマネージャーの使用方法と複合レイアウトの処理方法に関する重要な基本事項を教えてくれるので、すべてのジュニア開発者にハンドコーディングUIを開始することをお勧めします。

変更するたびにレイアウトを確認する必要があるため、これには時間がかかる傾向があります。

私は一般的な作業のほとんどでNetbeansのフォームエディタを個人的に使用していますが、UIを微調整します

構造

責任の境界について考え、再利用し、戦略を減らします。

あなたが望まないのは、すべてを行う巨大なマスタークラスです。維持と更新は難しいでしょう(私は毎日この恐怖と一緒に暮らしています)。

代わりに、責任の明確な領域を特定し、ゲッターとセッターまたはモデルを使用して、アプリケーション内でデータを移動します。コードを切り離すことができるほど、更新と変更が容易になります。

仕事のように識別し、可能な場合はインターフェースおよび抽象クラスとしてモデル化します。基本的に、コードの対処について考え始めるところは、おそらく設計がオフになっていることを示す良い兆候であり、重複をカバーするために抽象クラスの実装を検討する必要があります。

APIを利用して、Action一般的に使用される概念を複製します(コピーアンドペーストはその一例です。メニュー項目、可能なツールバー項目、場合によってはポップアップ項目も必要です。これらはすべて同じActionクラスで処理できます)。

データをビューから分離します。前にも言ったように、モデルを利用してください。データは、データがどのように収集または変更されるかを気にする必要はなく、それが可能であるということだけを気にする必要があります。同様に、ビューはデータの管理方法を気にする必要はなく、データの管理方法だけを気にする必要があります。

可能であれば、アプリケーションの個別の領域間のインターフェースを定義します。このようにして、アプリケーションをさらに切り離すことができ、どの部分も1つの実装に依存することはありません(hello my world:P)

コンポーネント階層を掘り下げてそのフィールドにアクセスしようとしないでください。コードを変更する必要がある場合は、悪夢が発生します。

于 2012-10-18T09:42:08.790 に答える
3

JFrameがアプリのメインウィンドウになり、パネルがそれを構成するレンガになります。

各パネルは独自のクラスで作成する必要があり、パッケージの機能ごとに配置できます。アプリケーションの論理部分のコンテンツを保持するためのパネルと、実際のものを含むパネルがあります。論理パネルは、メインビューとメニューバーにすることができます。アプリケーションパネルは、フォーム、メニュー、キャンバスなどになります。

アプリケーションパネルを論理パネル内に配置し、ユーザーのアクションに応じて論理の内容を変更する必要があります。

JFrame内でビューを構成し、パネル内でコンポーネントをレイアウトするには、レイアウトがどのように機能するかを学習する必要があります。

たとえば、BorderLayoutは、アプリケーションのメイン領域を定義するときの古典です。-上部のメニューとツールバー-左側のブラウザ-下部のステータスバー-中央のメインパネル

WYSIWYGエディターを使用できますが、同じクラス内ですべての設計を行うことは避けてください。そうでなければ、恐ろしい巨大なクラスがあります。パネルを別々のクラスで作成し、メインビューで構成します。
空のパネルをプレースホルダーとして使用して、アプリケーションの構造を作成するのに役立てることができます。

2つのレイヤーが混在しないようにするには、ドメインデータをビューにバインドする必要があります。バインドとは、JavaBeanからフォームに移行する方法とその逆の方法を作成することを意味します。基本的なバインディングは手書きですが、それを行うためのツールがいくつかあります。小さなアプリケーションの場合は、すべてを手書きする方がよいでしょう。

Swingアプリケーションの構築は非常に難しい場合があります(イベントディスパッチスレッド、レイアウト管理、イベント管理、ウィジェットについて知っておく必要があります(ラベルは簡単ですが、JTableの処理は非常に複雑になる可能性があります)。

プロジェクトを開始する前に、このトピックに関する本を見つけ、それがどのように構成されているかを調べるために、オープンソースのスイングアプリケーションを見つけることをお勧めします。

于 2012-10-18T09:46:44.503 に答える
2

これが私のコードを整理する方法です:

class Panel1 extends JPanel{
   //code for panel1 and its Components
}

class Panel2 extends JPanel{
   //code for panel2 and its components
}
// and it follows. 
class ApplicationFrame extends JFrame{
    /// LOGIC to switch between panels
}

class Main{
  //contains main() function
}

手作業で作成されたGUIコードは、コンピューターで生成されたWYSIWYG-APPコードよりも優れています。

于 2012-10-18T09:34:16.383 に答える