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 が複雑になるにつれて、そのようなものを取り除くことができますが、適度な量の画面などではうまく機能します。