2017-03-08 15 views
1

GUIアプリケーション内でデータベースにJTableが埋め込まれていることを示すのに問題があります。以下埋め込みデータベースにJTableを埋め込むにはどうしたらいいですか?

私のコードが通るとパネルとGUIを作成し、私はその後、私のJTableを作成して、自分のアプリケーションにそれを追加します。私は、おそらくテーブルを作成するメソッドを実行します。移入が完了したら、何も表示されません。私のコードを解剖

は、私がどこかに私がここに来た理由であるいくつかの未知の理由で、私のテーブルに解析していないデータを引き起こしていると考えているにつながっています。ボタンをクリックするだけで

、このコードが伴います:

JTable tigerTable = new JTable(); 

JPanel centerPanel = new JPanel(); 

centerPanel.add(tigerTable, new GridBagConstraints()); 

FillTable(tigerTable, "SELECT * FROM TIGER_INFO"); 

FillTable方法を次のようにそう

//Add buildTableModel method 
public void FillTable(JTable table, String Query) 
{ 
    try 
    { 

     Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 
     Connection conn = DriverManager.getConnection("jdbc:derby:STOCK_CONTROL"); 
     Statement stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
     ResultSet rs = stat.executeQuery(Query); 
     System.out.println("Connected"); 

     //Remove previously added rows 
     while (table.getRowCount() > 0) 
     { 
      ((DefaultTableModel) table.getModel()).removeRow(0); 
     } 

     int columns = rs.getMetaData().getColumnCount(); 

     while (rs.next()) 
     { 
      Object[] row = new Object[columns]; 

      for (int i = 1; i <= columns; i++) 
      { 
       row[i - 1] = rs.getObject(i); 
      } 
      ((DefaultTableModel) table.getModel()).insertRow(rs.getRow() - 1, row); 
     } 

     rs.close(); 
     stat.close(); 
     conn.close();   
    } 
    catch (InstantiationException | 
      IllegalAccessException | 
      ClassNotFoundException | 
      SQLException e) 
    { 
     System.out.println(e); 
     e.printStackTrace(); 
    } 
} 

は、アプリケーションが作成されますが、データを任意のテーブルを表示しません。私のデータベースには3列と3行が含まれていますが、私のデータはJTable内に表示されません。

私の質問は、どのように私は私のデータベースと私のJTableを移入することができますし、私のGUIアプリケーション上で正しく表示されますか?

あなたが何かを必要とする場合は、私が知っていると私は私ができる限り提供しますしてください。

ありがとうございます。

答えて

0

私は解決策を発見しました。

は、まず手動でテーブルモデルを設定してみてください。

JTable tigerTable = new JTable(); 
tigerTable.setModel(new DefaultTableModel(0, numberOfColumns)); 

モデルを指定しない場合、JTableは匿名の内部クラスを作成し、一般的にどのように振る舞いません。

1

私はあなたが運転をミックスだと思う、私はこの命令を使用することをお勧め:

  1. あなたのオブジェクト
  2. の情報を格納する豆、またはエンティティを作成
  3. 、あなたのデータの一覧を取得します。

    0123:

だから、あなたのJTableでデータを表示するためにこれを使用することができ、あなたのJTableにデータを表示します

塗りつぶし日付の方法は次のようになります。

private void fillData(List<TIGER_INFO> list) { 
    DefaultTableModel model = (DefaultTableModel) jTableName.getModel(); 

    while (model.getRowCount() > 0) { 
     for (int i = 0; i < model.getRowCount(); i++) { 
      model.removeRow(i); 
     } 
    } 

    for (TIGER_INFO obj : list) { 
     model.addRow(new Object[]{ 
      obj.getAttribute1(), 
      obj.getAttribute2, 
      obj.getAttribute3 
     }); 
    } 
} 
+0

データベーステーブルの変数を作成するにはどうすればよいですか?'String myTable =" TIGER_INFO "'? TIGER_INFOの下に赤い線があります。 ありがとうございます。 – juiceb0xk

+0

このクエリのテーブルの名前を 'FillTable(tigerTable、" SELECT * FROM TIGER_INFO ");と置き換えたい場合は、この変数を作成してこの名前と連結できる' FillTable(tigerTable、 "SELECT * FROM "+ myTable);'もし説明しないなら、もっと詳しく@ juiceb0xk –

+0

'List list = new ArrayList <>();' - 現在、TIGER_INFOは赤で下線が引かれています。私はテーブルから配列リストを作っていると仮定しています。 TIGER_INFO変数をTIGER_INFOテーブルを指すようにするにはどうすればよいですか? – juiceb0xk

0

私はAbstractTableModelにを拡張するクラスを作成することをお勧めします。 SQL文に基づいてコンテンツを埋め込む関数をこのクラスに追加します。そして、それは次のようになります:

TigerTableModel tigerModel = new TigerTableModel(dbConnection); 
tigerModel.executeQuery("select * FROM TIGER_INFO"); 
JTable tigerTable = new JTable(tigerModel); 

か、すべてのSQL文を実行することができ、汎用のTableModelを作成するので、あなたのプロジェクトに非常に柔軟性があります。私はあまりにも長い道のりのために問題の周り私の頭をラップしようとしてきた、と私は最終的にそれを固定 -

関連する問題