显示从Mysql(blob)到Jtable-DefaultTableModel的图像

时间:2015-04-17 18:31:21

标签: java mysql image swing jtable

我在我的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());
    }
}

2 个答案:

答案 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());
    }
}
相关问题