2012-01-22 3 views
0

私はMS AccessデータベースからJTableにデータを取得しようとしています。このコードスニペットをコンソールで動作させるとうまく動作しますが、netbeansのボタンイベントでは何も表示されません。次のコードを使用して、私のテーブル名はtable1です。データベースin jtable

 private void jButton11ActionPerformed(java.awt.event.ActionEvent evt) {           

    Vector columnNames = new Vector(); 
    Vector data = new Vector(); 

    try { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    Connection con = DriverManager.getConnection("jdbc:odbc:rrr"); 
    String sql = "Select * from client"; 
    Statement stmt = con.createStatement(); 
    ResultSet rs = stmt.executeQuery(sql); 
    ResultSetMetaData md = rs.getMetaData(); 
    int columns = md.getColumnCount(); 
    for (int i = 1; i <= columns; i++) { 
     columnNames.addElement(md.getColumnName(i)); 
    } 
    while (rs.next()) { 
    Vector row = new Vector(columns); 
    for (int i = 1; i <= columns; i++){ 
     row.addElement(rs.getObject(i)); 
    } 
    data.addElement(row); 
    } 
    rs.close(); 
    stmt.close(); 
    } 
    catch(Exception e){ 
    System.out.println(e); 
    } 
    JTable table = new JTable(data, columnNames); 
    TableColumn col; 
    for (int i = 0; i < table.getColumnCount(); i++) { 
    col = table.getColumnModel().getColumn(i); 
    col.setMaxWidth(250); 
    } 


    }   

答えて

1

最初にトップレベルのウィンドウが必要です。これは、Netbeansフレームワーク(私が使用していると思われる)で実行可能である必要があります。

次に、テーブルとボタンをそのウィンドウに追加し、ActionまたはActionListenerをボタンに登録します。そのアクションでは、新しいワーカースレッド(たとえばSwingWorker)を作成し、そのスレッド内に日付をロードし、終了時にテーブルのモデルを更新します。

+0

で見つけることができprakash_d22 @ –

+0

は、オラクルサイトでSwingのチュートリアルを見て... @Thomasに感謝するが、uは上記のコードスニペットで私を助けることができるスイングする新しいイム。 Swingの仕組みについての基本的な説明が必要です。 – Thomas

1

現在のソリューションでは、ボタンを押したときに新しいJTableインスタンスを作成します。ただし、JTableはどのコンポーネントにも追加されないため、actionPerformedメソッドが返されるとJTableへの参照は失われ、表示されなくなります。

JTable table = new JTable(data, columnNames); 
TableColumn col; 
for (int i = 0; i < table.getColumnCount(); i++) { 
    col = table.getColumnModel().getColumn(i); 
    col.setMaxWidth(250); 
} 
//here is a missing statement, like panel.add(table); 

すでに既存のテーブルを持っている場合、トーマスがすでに示唆したように、新しいものを作成するのではなく、その既存のテーブルのモデルを更新した方がよいかもしれません。また、SwingWorkerを使用してEDTを別のスレッドにテーブルモデルを構築することを検討してください。これにより、データベースが照会され、テーブルが構築されている間、ブロックされたUIが回避されます。 SwingWorkerの例の使用法はSwing Concurrency tutorial

+0

plzは私にコードスニペットを助けることができます。私はswingworkerで新しいです。 –

+0

コードスニペット(実際には完全に動作する例)は、私が – Robin

+0

をリンクしたチュートリアルで見つけることができますが、あまりにも複雑な感謝の方法です。 –

関連する問題