1

javafxでGUIを構築することについて質問があります。

多くのページでプログラムを作成する場合、たとえば、開始ページには「ユーザーの追加」、「ユーザーの削除」、「ユーザーデータの変更」のボタンがいくつか含まれています。これらのボタンはそれぞれ異なるパネルを描画します。そして、ここに私の質問があります-それらをどのように整理するか。すべてのパネルを1つのクラスに入れると、すぐに巨大になり、多くのバグが発生します。また、コードの一部が壊れているのを見つけるのも困難です。すべてのパネルを異なるクラスで定義する必要がありますか?ただし、その場合、サブメニューからメインメニューに戻る際に問題が発生します。

または別の例。プログラムの最初のパネルはログインページで、次のページは挿入されたログインによって異なります。

たくさんのパネルをどのように整理すればよいですか?どんな助けもいただければ幸いです:)

4

2 に答える 2

2

fxml を使用している場合は、パネルごとに個別の fxml ファイルと関連する Controller クラスを作成できます。これにより、ビューがパネル内のロジックから分離され、各パネルのビューとロジックが他のすべてのパネルから分離されます。

トリックは、実際にパネル間でデータを共有する必要がある場合になります。たとえば、ユーザー変更フォームに、変更するユーザーを通知する必要があります。この場合、何らかのコンテキスト情報が必要です。これを行うさまざまな方法は次のとおりです。

  1. グローバル ストアを使用します (サーバーの http セッションに似ています)。
  2. Guice、Spring、CDI などの依存性注入フレームワークを統合します。
  3. パネル間のデータの受け渡しを制御する管理サービスを作成します。
  4. データ共有にはイベント バススタイルのシステムを使用します。
  5. サーバー管理状態の html スタイル Web アプリのようにアプリケーションを実装します。
  6. 現在 (残念ながら) 機能していないjfxflowのようなフレームワークを使用します。

単純なアプリケーションの場合、次の単純なプロジェクトをテンプレートとして使用して、「パネル間のデータの受け渡しを制御する管理サービスを作成する」を使用します。プロジェクトテンプレートは、「プログラムの最初のパネルがログインページで、次のページは挿入されたログインに依存する」プログラムです。

プレーン Java を使用していて fxml を使用していない場合は、fxml を使用しない他の Java プロジェクトがどのように編成されているかを調べて、プロジェクトを同様に編成することができます。たとえば、JavaFX Ensemble App柳ブラウザ、 JavaFX Henley Sales Data App (Ensemble App と同じサンプル コード パッケージの一部としてダウンロード可能) などです。Ensemble のソース コードを確認することから始めることをお勧めします。

于 2013-01-29T18:52:34.623 に答える
1

プロジェクトが大きすぎない場合はPresenter、ステージとプログラムの流れを制御し、多くのViewクラスの 1 つを表示するクラスを作成することをお勧めします。

これはプレゼンター クラスの例です。

class Presenter {

public void showA(Stage mainStage){
    ViewA a = new ViewA();
    a.setOnBackButton(new ViewCallback(){
        public void call(){
            showB();
        }
    });
    mainStage.setScene(new Scene(a));
}

public void showB(Stage mainStage){
    ViewB b = new ViewB();
    b.setOnBackButton(new ViewCallback(){
        public void call(){
            showA();
        }
    });
    mainStage.setScene(new Scene(b));
}

}

これはviewボディの例です:

public class ViewA {

private ViewCallBack onBackButton = null;

public void setOnBackButton(ViewCallback callback){ onBackButton = callback; }

public void callBack() { if (onBackButton != null) onBackButton.call(); }

...

// somewhere in your code
Button b = new Button("shoot me!");
b.setOnAction(new EventHandler<ActionEvent>(){
    public void handle(ActionEvent event){
        callBack();
    }
});

}

これがViewCallbackインターフェースです

public Interface ViewCallback {
    public void call();
}

この単純なコールバック インターフェイスまたはCallback<P,R> JavaFX 汎用コールバックインターフェイスを使用できます。

于 2013-02-09T07:39:06.703 に答える