Java デスクトップ GUI アプリケーションに関して非常に一般的な質問があります。
私の経験: ここ数年、私は多数のデスクトップ アプリケーションを開発してきました。一部は Swing のみを使用し、一部は Spring-RCP (これは素晴らしいものでしたが、それでも 3 年以上更新されていないフレームワークに賭けることはできません)もう何年も)。ワルキューレRCPも見ていますが、そこもあまり動きがないように思えます。また、Wicket、Tapestry、そして最近では JSF2 (Primefaces) を使用して Web アプリケーションを開発しました。Web アプリケーションである程度の経験を積んだ私には、Java デスクトップ GUI がずっと前に放棄されたように感じます。もちろん、以前は気付きませんでしたが、Web アプリを開発した後、直接比較すると、デスクトップ UI のプログラミングがいかに面倒で複雑であるかがよくわかります。
私が探しているもの: 私はここでロケット科学を行っていません。私が最も見逃しているのは、次の単純なレイアウトのフォームを構築する簡単な方法です
label_a input_a feedbackMessage_a
label_b input_b feedbackMessage_b
....
button_save
レイアウトだけの問題ではなく、それがおそらく最小の問題です。まず、入力フィールドの値をある種の「バッキング Bean フィールド」に「バインド」する方法を探しています。また、直接フィードバックを使用したい。つまり、input_a の検証が失敗した場合、feedbackMessage_a にメッセージを表示し、それ以外の場所にはメッセージを表示したくない。3 番目に、この直接的なフィードバックで JSR-303 検証を使用したいと考えています。典型的なデスクトップ アプリケーションのソースコードを掘り下げると、通常、すべてのボタンに巨大なアクション リスナーが表示されます。ここでは、値の割り当て、検証、フィードバック メッセージの作成がすべて手動で記述されています。これをタペストリーや jsf2 のような Web フレームワークと比較してください。そこで行うことは、何らかの式言語を使用して入力フィールドを変数/フィールドに「バインド」することです。それだけです。値が検証されています (例: JSR-303 アノテーションを使用) および (すべての値が有効な場合) バッキング Bean のバインドされたフィールドに自動的に渡されます。また、検証エラーが発生した場合は、入力フィールドの ID を使用して責任のある入力フィールドを識別する検証メッセージが作成されます。その特定の ID のメッセージ コンポーネントが存在する場合、検証メッセージはそこに設定されます。それはただスムーズで論理的です。
デスクトップ GUI に戻ります。たとえば、20 個の入力フィールドを持つフォームに匹敵するユーザー インターフェイスを作成するには、おそらく 500 行ほどのリスナー コードが必要になるでしょう。最初にすべてのテキスト フィールドの値を自分で読み取り、自分で検証して、対応する変数に自分で書き込みます。 . JSR-303 を使用する場合、バリデーターを自分で呼び出すことができますが、対応する入力フィールドに戻ってそこにフィードバック メッセージを設定するのは面倒です。痛いですね。
私の質問: 痛みを和らげる方法はありますか? 最新のデスクトップ アプリケーションをどのように開発していますか? 使用しているフレームワークとその理由は何ですか? webframeworks と同様のバインド方法を使用する可能性はありますか? 上記で説明したように、「直接フィードバック」を実装するにはどうすればよいですか? ここで電車に乗り遅れたのでしょうか、それともここ数年で Web アプリケーションを作成するのが本当に簡単になったのですか? (JavaFxを除いて、それは私には少し役に立ちません)
最後に誤解 しないでほしいのですが、私は Java デスクトップ アプリケーションの大ファンです。私が働いているような中規模の会社では、同種の環境 (すべてのクライアントに同じ Java バージョンがインストールされているなど) があり、Web アプリケーションの利点は実際にはわかりません。webstart を使用すると、アプリケーションは非常に高速に起動します (もちろん、最初にダウンロードを開始した後)。それでも、Java のフロントエンド中心の Web フレームワークが光速で前進している一方で、java-desktop はほとんどまったく動いていないように見えます。私はそのままで暮らすことができますが、私は本当にこの質問をしなければなりません.