我在我的mysql数据库中用blob将其他信息插入我的图像(将其转换为字节),并且我能够将图像显示在jlable中..但是当我尝试在一个jlable中显示它时问题到了Jtable ...我正在使用DefaultTableModel,这是我的整个代码..有人可以给我一点想法吗?我搜索了很多,并注意到解决了我的问题:(我想在最后一个col中显示图像...我只给出了这部分的代码.. ...
如果有人想尝试gui here is the full code -
private void getTableData(){
//Connection conn=null;
//Statement st=null;
try{
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/vehicle","root","");
st = conn.createStatement();
String sql="SELECT * FROM user";
ResultSet rs = st.executeQuery(sql);
DefaultTableModel model = new DefaultTableModel(new String[]{"Name", "Gender", "Mobile Number", "Email", "Position", "User Name", "Privilege", "Photo"}, 0);
jTableUsers.setModel(model);
// jTableUsers.getColumnModel().getColumn(7).setCellRenderer(jTableUsers.getDefaultRenderer(ImageIcon.class));
// jTableUsers.getColumnModel().getColumn(7).setCellRenderer(new ImageRenderer());
if(rs.next()){
byte[]imagedata= rs.getBytes("image");
formate = new ImageIcon(imagedata); //formate is the variable
showimageF.setIcon(formate);
}
while(rs.next())
{
String col1 = rs.getString("f_name");
String col2 = rs.getString("gender");
String col3 = rs.getString("mobile");
String col4 = rs.getString("email");
String col5 = rs.getString("position");
String col6 = rs.getString("user_name");
String col7 = rs.getString("user_type");
//String col18 = col18
// mod.addRow(new Object[]{xx, rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getString(8), rs.getString(9), rs.getString(10), rs.getString(11), rs.getString(12), rs.getString(13), rs.getString(14), rs.getString(15), rs.getString(16), rs.getString(17), rs.getString(18), rs.getString(19), rs.getString(20), rs.getString(21), rs.getString(22), rs.getString(23), newIconImage, rs.getString(25), rs.getString(26), rs.getString(27)});
model.addRow(new Object[]{col1, col2, col3, col4,col5,col6,col7,formate,});
}
//jTableUsers.setModel(model);
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
答案 0 :(得分:1)
但是当我试图在Jtable中显示它时问题就到了
您需要告诉表该列包含一个Icon,然后该表将使用相应的渲染器来渲染Icon。您可以通过覆盖getColumnClass(...)
DefaultTableModel
方法来执行此操作
@Override
public Class getColumnClass(int column)
{
switch (column)
{
case 7: return Icon.class();
default: return Object.class;
}
}
答案 1 :(得分:0)
感谢您的时间..编辑完成后,现在是代码的一部分: private void getTableData(){
//Connection conn=null;
//Statement st=null;
try{
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/vehicle","root","");
st = conn.createStatement();
String sql="SELECT * FROM user";
ResultSet rs = st.executeQuery(sql);
DefaultTableModel model = new DefaultTableModel(new String[]{"Name", "Gender", "Mobile Number", "Email", "Position", "User Name", "Privilege", "Photo"}, 0);
JTable table=new JTable(model){
@Override
public Class getColumnClass(int column)
{
switch (column)
{
case 8: return Icon.class;
default: return Object.class;
}
}};
jTableUsers.setModel(model);
// jTableUsers.getColumnModel().getColumn(7).setCellRenderer(jTableUsers.getDefaultRenderer(ImageIcon.class));
// jTableUsers.getColumnModel().getColumn(7).setCellRenderer(new ImageRenderer());
if(rs.next()){
byte[]imagedata= rs.getBytes("image");
formate = new ImageIcon(imagedata); //formate is the variable
showimageF.setIcon(formate);
}
while(rs.next())
{
String col1 = rs.getString("f_name");
String col2 = rs.getString("gender");
String col3 = rs.getString("mobile");
String col4 = rs.getString("email");
String col5 = rs.getString("position");
String col6 = rs.getString("user_name");
String col7 = rs.getString("user_type");
//String col18 = col18
model.addRow(new Object[]{col1, col2, col3, col4,col5,col6,col7,formate,});
}
// jTableUsers.setModel(table);
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}