2009-07-09 14 views
1

いくつかのデータ(各行にStringBoolean)を表示するために使用したいJTableがあります。データは自分のクラスで管理されています。 JTableにデータモデルをバインドする方法があるので、モデルに追加するときにJTableが動的に更新され、モデルから何かを削除すると、その行がJTableから削除されますか?データとJTableの操作

以前はFlexとActionscriptで作業していましたが、これはデータバインディングでは非常に簡単なので、Javaでどのように処理されているのか不思議です。

ありがとうございました。

答えて

2

データセットにTableModelインターフェイスを実装する必要があります。それを行うなら、それをJTableに適用することができます。 AbstractTableModelを拡張すると、テーブルが処理するいくつかのイベント発生メソッドを継承し、ビューを更新します。 see this tutorialJTableの既定の実装では、データがレンダリングされ、ブール値が見つかった場合はチェックボックスとして表示されます。

+0

ありがとう...私はこの例を前に見ましたが、ユーザーは表内のデータを編集します。私は自分のデータモデルをTableModel自体を実装することについて考えていませんでした。 – knt

2

おそらく、Java JTable tutorialJTable API documentationの両方がJTableの仕組みを理解するのに役立つでしょうが、それ以外の場合は簡単に説明します。

JTableの前提は、TableModelインターフェイスを実装するオブジェクト(これはデフォルトでDefaultTableModelのインスタンス)とペアになっていることです。テーブルモデルオブジェクトは、それぞれ独自のデータ型(ケースではStringBoolean)を持つ列のリストと、テーブルの実際のデータを含む行のリストで構成されています。あなたはテーブルモデルにデータを追加するときにこのように、それはいつものようにレンダリングされる

public Object getValueAt(int row, int col)

:JTableのスイングの描画コードによって描画されるたびに

、それは繰り返しメソッドを呼び出しますあなたは次の画面リフレッシュ(動的)で期待しています。

本当に心配する必要があるのは、オブジェクトからテーブルモデルにデータを取得してから、もう一度取り消すことだけです。それ以外に、JTableはすべての重い持ち上げを気にかけません。

2

単純なケースではTableModelを実装するのは簡単ですが、真のバインディングアプローチ(私のお気に入りはGlazed Listsです - これがどれほど簡単で、勝っても30秒のビデオを見てください)。 Beans Binding(今はBetter Beans Binding)は、役に立つかもしれない観測可能なリストの実装も持っています(私はGlazed Listのアプローチを大いに好みます)。