1

私は、基本的にユーザー入力を少し取り、プログラムが実行されているマシンからアクセス可能なさまざまなドライブでフォルダー/ファイル操作を行う GUI を作成することを任されました。この GUI を設計している間、私は MVC が私の人生をより簡単にし、コードを変更することを決定した他のすべての人を楽にすることに気付き始めましたが、これが NetBeans を介してどのように行われるかがよくわかりません。

このトピックについて少し調べてみましたが、NetBeans でこれを実行できるかどうかについて、明確な答えがまったくわかりません。プログラムで GUI を構築すれば確かにそれは可能ですが、それでは NetBeans を使用することを選択した理由の目的が幾分損なわれます。

4

3 に答える 3

4

Netbeans はこれを行うのに問題ありません。

重要なことは、基本的な Swing コンポーネントはすべて MVC ですが、ほとんどの場合、MVC と対話することはないということです。単純なテキスト フィールドには内部モデルがありますが、そのモデルはモデルではなく、テキスト フィールドはより基本的なものです。

モデルは、ボタンの押下、矢印の移動、マウスのクリックではなく、より高レベルのイベント (ボタン アクションなど) を処理します。

そのため、高レベルの MVC の場合、通信の主要なメカニズムは PropertyChangeListeners を介して行われます。アプリを構築する基本的なタスクは、さまざまなデータ要素の PCL をそれらの GUI コンポーネントと一緒に配線することです。

たとえば、アイテムのリストがある単純なケースです。そして、そのリストは JTable を介して画面にレンダリングされ、そのテーブルは JPanel にあります。

リストには独自のモデルがあります。つまり、単なる Java リストではありません。標準の Java リストは PCL 通知をサポートしていないため、これはリストではありません。しかし、あなたのモデルは明らかにそのようなリストをラップします。

さて、次の質問は、JTable を List モデルに関連付ける方法です。

1 つは、JTable をサブクラス化し、モデルにバインドすることです。または、もっと簡単に言えば、JTable をプリミティブとして使用し、モデルと JTable の間の相互作用をそれを囲む JPanel に管理させます。

つまり、JPanel に PropertyChangeListener を実装させ、すべてを接続するときに次のようにします。

ListModel myModel = new ListModel();
ListPanel myPanel = new ListPanel();
myModel.addPropertyChangeListener(myPanel);

これで、ListModel が変更されるたびに、ListPanel に通知されます。

ListPanel では、次のようなものを使用できます。

@Override
public void propertyChange(PropertyChangeEvent evt) {
    if (evt.getPropertyName().equals(ListModel.CHANGED)) {
        ListModel model = (ListModel) evt.getSource();
        DefaultTableModel tm = (DefaultTableModel) listTable.getModel();
        tm.setRowCount(0);
        for (String s : model.getList()) {
            tm.addRow(new Object[]{s});
        }
    }
}

これで、テーブル モデル全体が単純にリロードされることがわかりますが、必要に応じてプロパティを細かく変更できます。また、これが他のモデル (Person など) の場合は、パネルに個々のテキスト フィールドなどを入力できることもわかります。

これは非常に単純な GUI ですが、これらすべてがどのように接続されるかの基本を示しています。Swing の例では、これが少し失われていると思います。Swing の例は、1 つのパネル画面には最適ですが、他のビューを追加し始めるとまったくスケーリングしません。

JPanels は基本的に結合された VC になります。GUI が複雑になるにつれて、そのようなものを取り除くことができますが、適度な量の画面などではうまく機能します。

于 2013-01-08T17:23:36.423 に答える
2

Netbeans がそのコードベースを活用するのに役立つ 2 つの方法があります: GUI ビルダー (1) と NB プラットフォーム (2)。

(1) Netbeans はしばらくの間、Java の世界で優れたドラッグ アンド ドロップ GUI ビルダーの 1 つで、コードネームはMatisseでした。

そうは言っても、私がそれを使ってから長い時間が経ちました-そして、生成されたコードがあまり好きではありませんでした.あまり理解できませんでした(もちろん、これは自動生成コードの目的ではありません)。より複雑な UI については、レイアウトを手書きで作成しました。作業は、最も快適ではないにしても、耐えられるものでした。単純な UI の場合は、GUI ビルダーをもう一度試しますが、ワイヤード ロジックが多く含まれる複雑な UI の場合は、おそらく手動で記述します。

GUI ビルダーがどのように機能するかを確認するには、多くのチュートリアル ビデオの 1 つをご覧ください。たとえば、次のようなものです。

(2) Netbeans にとっての Netbeans プラットフォームは、Eclipse にとっての RCP と同じです。IDE 用に開発された、再利用可能な豊富なコンポーネントのセット。私は簡単に NB プラットフォームを調べましたが、プロジェクトの方向性が変わらなければ、NB プラットフォームを使用していたでしょう。おそらく、この SO の質問は、この側面をより明確にすることができます:どのリッチ クライアント プラットフォームを使用するか? .


MVCについて。汎用の Swing アプリケーション フレームワークである JSR 296 がありまし。このプロジェクトが示すように、それは人々がそれをフォークしてそれに取り組むことを止めませんでした: Better Swing Application Frameworkは 2012 年半ばにリリースされました。そのようなフレームワークを使用しない場合でも、すべてのコードを 1 つのクラスに入れないでください(コメントで言及したように)、単純なモデル/コントローラーを作成し、UI コンポーネントを分離したままにします。単純なアプリの場合、派手である必要はありません。最小限の MVC 風の懸念の分離で十分かもしれません。

于 2013-01-08T16:47:38.690 に答える
0

私もこの問題にぶつかり、NetBeans GUI ビルダーを使用してコントローラーをビューから分離する方法の良い例を示すリンクを見つけました。

ここにリンクがあります。

于 2013-04-09T21:36:28.807 に答える