2016-12-21 11 views
0

これは重複した質問ですが、私の場合は答えが見つかりません。私は正常に私のJTableデータベースからのデータを作成しました。私のJTableでは、列の1つに画像が保存されています。私はgetColumnClass(int column)でこれらの画像を表示しようとしましたが、この方法の使い方を理解できません&良いチュートリアルは理解できました...どうすればこれらの画像を私のJTableに表示できますか?イメージをJTableに表示

import java.sql.*; 
import java.util.*; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

class BurgerData extends JFrame 
{ 
JTable BurgerList; 

public BurgerData() 
{ 
    setSize(800,800); 
    setLayout(new FlowLayout()); 
    setVisible(true);  
    try 
    { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/image","root",""); 
     Statement stmnt = con.createStatement(); 
     ResultSet rs = stmnt.executeQuery("SELECT * FROM `icon`"); 

     ResultSetMetaData rsmetadata = rs.getMetaData(); 
     int col = rsmetadata.getColumnCount(); 
     DefaultTableModel dtm = new DefaultTableModel(); 

     Vector<String> col_name = new Vector<String>(); 
     Vector<Object> row_data = new Vector<Object>(); 

     for(int i=1;i<=col;i++) 
     { 
      col_name.addElement(rsmetadata.getColumnName(i)); 
     } 

     dtm.setColumnIdentifiers(col_name); 

     while(rs.next()) 
     { 
      row_data = new Vector<Object>(); 

      for(int i=1;i<=col;i++) 
      { 
       row_data.addElement(rs.getObject(i)); 
      } 

      dtm.addRow(row_data); 
     } 

    BurgerList = new JTable(dtm) 
    { 
     public Class getColumnClass(int column) 
     { 
      return getValueAt(0, column).getClass(); 
     } 
    }; 

    BurgerList.setModel(dtm); 

    add(BurgerList); 

    } 

    catch(SQLException e) 
    { 
     System.out.println("Unknown Error"); 
    } 

    catch(Exception eg) 
    { 
     System.out.println("Unknown Error"); 
    } 
} 

public static void main(String args[]) 
{ 
    BurgerData n = new BurgerData(); 
} 
} 
+1

1つまたは2つの列を持つ 'JTable'を使って単純なクラスを作成します。このクラスでは、画像をハードコーディングします(ここでは、[http://stackoverflow.com/questions/4941372/how-to-それがうまくいかない場合はDBからイメージを取り込みます。それから、DBの問題が間違っていることを知っています。有効な[mcve]は、この質問が関連していないので、DB接続なしでコピー&ペーストできます。 – Frakcool

+0

私はすでにJTable "BurgerList"にImages(データベースから)をObject.Butに挿入していますが、フレームにJTableを追加すると、すべてがOKですが画像は表示されません([B @ 6b4455f0]のような文字列が表示されています) – Hasan

+0

コードにImageIconインスタンスが表示されません。データのタイプはImageIconで、オブジェクトではない – Frakcool

答えて

2

私はすでに挿入されている画像

それはのようないくつかの文字列を示している:[Bする@ 6b4455f0])

JTableので、Imageのデフォルトのレンダラを持っていません。 ImagetoString()表現が表示されています。

Imageを使用してImageIconを作成する必要があります。 JTableは、JLabelを使用してIconをレンダリングします。例えば

How to set icon in a column of JTable?

row_data.addElement(rs.getObject(i)); 

だから、あなただけのテーブルモデルにすべてのオブジェクトをコピーすることはできません。 ObjectがImageであるかどうかを確認し、ImageIconを作成してモデルに追加する必要があります。

もう1つの解決策は、Imageクラスのカスタムレンダラーを作成することです(オブジェクトをモデルに直接コピーするだけで済みます)。詳細は、Using Custom RenderersのSwingチュートリアルのセクションを参照してください。

+0

ああ、これは役に立ちます。 – Hasan

+0

私はどの特定の列に画像があるのか​​知っています。したがって、ベクトルで行う場合、私のベクトル型は何ですか? – Hasan

+0

@ハサン、私が提供したリンクのコードを見ましたか?そのリンクではどのようなデータ型が使用されていますか? – camickr

関連する問題