2011-12-14 5 views
2

私はJTableでmysqlテーブルの内容をバインドしたいと思います。私は正常に接続しました。テーブルの行と幅を500に設定します。データを含む500行と空を表示します。今私はデータだけを見たいと思う。空の行を表示したくありません。Java - JTableで動的に行を初期化するには?

私を助けてください

私のアプリケーションは、事前に

class AbstractTableEmployee extends AbstractTableModel { 

    int row2; 

    private String[] columnNames = { "ID", "Name", "Company", "Department", "Location", "Mobile NO" , "Shift" }; 
    private Object[][] data = new Object[500][500]; 


    public int getColumnCount() { 
     return columnNames.length; 
    } 

    public int getRowCount() { 
     int row = 0; 
     try { 
      row = this.count(); 
     } catch (SQLException ex) { 
      Logger.getLogger(AbstractTableEmployee.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return row; 
    } 

    public String getColumnName(int col) { 
     return columnNames[col]; 
    } 

    public Object getValueAt(int row, int col) { 
     return data[row][col]; 
    } 

    public void setValueAt(Object value, int row, int col) { 
     data[row][col] = value; 
     fireTableCellUpdated(row, col); 
    } 
    private int getRowCountFromDB() throws SQLException { 
     Connection con = (Connection) DBConnection.getDBConnection(); 
     int row = 0; 
     Statement st = null; 
     ResultSet rs = null; 
     String Sql = "Select * from Employee_Master where status = 'Active'"; 
     try { 
      st = (Statement) con.createStatement(); 
      rs = st.executeQuery(Sql); 
      while (rs.next()) 
      { 
       row++; 
      } 
     } 
     finally { 
      con.close(); 
      rs.close(); 
      st.close(); 
     } 
     return row; 


    } 

    private int count() throws SQLException { 
     return this.getRowCountFromDB(); 
    } 
} 

おかげ..方法getRowCountFromDB()を挿入した後に遅くなります。

+1

空でない行のみをフェッチします。このチュートリアルを読む - http://docs.oracle.com/javase/tutorial/uiswing/components/table.html – adatapost

+1

カスタムTableModelを作成しないでください。単にDefaultTableModelを使用してください。テーブルのサイズをハードコードする必要がないように、行を動的に追加することができます。 – camickr

答えて

3

JTableのドキュメントでは、カスタムテーブルモデルでテーブルを使用する方法の例を示します。

TableModel dataModel = new AbstractTableModel() { 
    public int getColumnCount() { return 10; } 
    public int getRowCount() { return 10;} 
    public Object getValueAt(int row, int col) { return new Integer(row*col); } 
}; 
JTable table = new JTable(dataModel); 
JScrollPane scrollpane = new JScrollPane(table); 

これは最小限の実装です。

編集:

効率的に数える行を取得する方法については、MySQLリファレンスに3.3.4.8 Counting Rowsを参照してください。あなたが望むものがすべて数字であるときに、テーブル全体を取得しているように見えます。

あなたは

Select COUNT(*) from Employee_Master where status = 'Active' 

してから、ちょうどその値を読み取るの線に沿って何かをしたいと思います。

dataに関しては、私はあなたのテーブルのサイズに応じて、あなたが持っているしたくない場合があります、あなたのテーブルにのみ7

とにかく持っているように見えることを考えると、それは500個の列を持っているために理由を見ません一度にそこにあるすべてのデータ。その場合、JTableのユーザーがスクロールしている場所に応じて、行のまとまりをフェッチしてキャッシュすることができます。あなたはそれにLIMITを使うことができます。

その他のアイデアやヒントについては、同様の問題を扱うquestionもご覧ください。少しはテキストで暗号化されたので、より良い別のポスターで述べたように

+0

私は以下のコードをAbstractTableModelに追加しました。しかし、アプリケーションは応答しません。メソッドcount()は、mysqlテーブルの行数を返します。 'public int getRowCount(){ int行= 0; { 行= this.count(); } catch(SQLException ex){ Logger.getLogger(AbstractTableEmployee.class.getName())。log(Level.SEVERE、null、ex); } 戻り行; } ' – Dhinakar

+1

遅いですか、具体的に停止しますか?それが遅ければ、上の私の編集を見てください。 – Vlad

+0

ありがとうございます..私はあなたの答えの助けを借りてこの問題を解決しました。 2つのインスタンス変数rowをintとして作成し、Booleanとしてフラグを立てます。 ** getRowCountFromDB()メソッドを使用して、** getRowCount()**メソッドセット** flag = false **および ** row **を初期化するとき、データベースに存在する行の数を指定します。その後、flag = falseを初期化します。 その後すぐに私は行を使いました。したがって、私のアプリケーションは以前の修正よりも速く実行されます。 – Dhinakar

2

は、前JTableチュートリアルを読むことでしょう、あなたの方法はJTable#setValueAt(Object aValue, int row, int column)あり、

+0

私のAbstractTableModelコーディングを参照してください。 – Dhinakar

+1

同じ 'myModel#setValueAt(Object aValue、int row、int column)'。私の質問、1)なぜ新しいオブジェクト[500] [500]があるのか​​、あなたは限界として、すべてのケースでデータベースから最初の500行しか見ることができず、MySqlまたはOracleでページネーションを探す必要があるこれらの機能はデフォルトでDbEngineに実装されているため、これは単純な作業です.JTableまたはそのモデルでその機能を制限し、このジョブをSqlEngineにリダイレクトすることはできません。2)DefaultTableModelを使用しない理由3)GUIいくつかのタスクにデータを渡す – mKorbel

+0

JTableの行と列を初期化する方法がわかりません。これはyの私は500としてオブジェクトを宣言しました。今私はこの問題を修正し、行数をサイズ変更..ありがとう.. – Dhinakar

関連する問題