2011-07-06 9 views
0

Java GUIを初めて使用し、SWINGでjTableを使用しようとしました。私は現在、私はOracleのチュートリアルに従うことによって作られたものを持っており、それが使用してテーブルのデータを取得します。ArrayListオブジェクトからのJava jTableデータと他のメソッドからの更新

Object[][] data = { 
    {"Kathy", "Smith", 
    "Snowboarding", new Integer(5), new Boolean(false)}, 
    {"John", "Doe", 
    "Rowing", new Integer(3), new Boolean(true)}, 
    {"Sue", "Black", 
    "Knitting", new Integer(2), new Boolean(false)}, 
    {"Jane", "White", 
    "Speed reading", new Integer(20), new Boolean(true)}, 
    {"Joe", "Brown", 
    "Pool", new Integer(10), new Boolean(false)} 
}; 

私はプロジェクトのオブジェクトの数に制限が含まれているのArrayList(productsInOrder)を持つ受注と呼ばれるオブジェクトを持っています。私はArrayListの各オブジェクトの次のそれぞれを表示するテーブルを取得しようとしています。 productsInOrder.getPrice()productsInOrder.getSKU()productsInOrder.getName()

誰かが正しい方向に向いていますか?または、私がインターネット全体を見てきたので、これを理解できないチュートリアルにリンクしてください。

最後に、ユーザーが特定のアクションを実行したときに、ProductListオブジェクトをArrayListに追加するアクションリスナーがあります。 jTableをどのように更新すればよいですか?単純にアクションリスナーのjTable全体をリロードするか、単にテーブルに別の行を追加する方法がありますか?

答えて

3

それとも

あなたが読んだチュートリアルを助けることができるチュートリアルに私をリンクするにはあなたを助ける必要がありますチュートリアルです。

基本的な解決方法は、カスタムTableModelを作成することです。この例では、データを2D配列に格納します。あなたの場合、データはArrayListに格納されます。したがって、2D配列の代わりにArrayListにアクセスするには、getVAlueAt()メソッドを変更する必要があります。

最後に、ユーザーが特定の操作を実行すると、さらに多くのProductオブジェクトをArrayListに追加するアクションリスナーがあります。

コードでは、ArrayListではなくTableModelを更新する必要があります。次に、テーブルモデルがテーブルに通知します。つまり、カスタムTableModelにaddRow(...)メソッドを実装する必要があります。

より複雑なソリューションでは、使用できる汎用テーブルモデルを作成できます。このアプローチの例については、Bean Table Modelを参照してください。 JButtonTableModelのサンプルコードは、興味のあるプロパティのみのBeanTableModelをさらにカスタマイズする方法を示しています。

+0

@Joseph Flynn私はhttp://java.sun.com/products/jfc/tsc/articles/ChristmasTree/に投票しました。 @camickr +1 – mKorbel

+0

@camickr - このチュートリアルに戻って私に指摘してくれてありがとう、再読み込みは大きな助けとなっています。私がまだ理解していない1ビットは、テーブルを更新するのが暑いです。 ArrayListと他の場所でArrayListを使用するので、カスタムTableModelのArrayListとaddRow(...)メソッドを更新する必要がありますか?コードを複製するので、このコーディングは悪いですか?ありがとう。 – Joseph

+0

私は、ArrayListではなく、TableModelを直接更新することをお勧めしました。 RowTableModelには、個々のオブジェクトにアクセスできるようにaddRow()やremoveRow()などのメソッドがあります。 ArrayListを直接更新すると、TableModelはデータが変更されたことを認識しません。この場合、ArrayListを更新するコードでは、テーブル全体を再ペイントするためにtable.repaint()を呼び出す必要があります。これは良い考えではありません。これは、MVCデザインでは、モデルは、データが変更されたときにビューに通知します。 – camickr

0

The Definitive Guide to Swing John ZukowskiはSwingの優れたリソースです。それは関連する事例を用いてあらゆるものを系統的に扱っています。強くお勧めします。

関連する問題