我试图根据条件将图标放在特定的列中,但获得的只是图像的链接。

这就是启动表代码的方式:

    DefaultTableModel model = new DefaultTableModel() {

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }

    @Override
    public Class<?> getColumnClass(int column) {
        switch (column) {
            case 0:
            case 1:
                return Integer.class;
            case 2:
                return ImageIcon.class;
            default:
                return Object.class;
        }
    }
};


然后根据条件(完成(尚未开始)-进行中)从数据库中填充表:

    model.addColumn("Phases");
    model.addColumn("Date de début estimée(aaaa/mm/jj)");
    model.addColumn("Date de début réelle(aaaa/mm/jj)");
    model.addColumn("Date de fin estimée(aaaa/mm/jj)");
    model.addColumn("Date de fin réelle(aaaa/mm/jj)");
    model.addColumn("Status");
    model.addColumn("Tendance");

    ArrayList<String> name = new ArrayList<String>();
    ArrayList<String> last_name = new ArrayList<String>();

    String status = null;
    String tendance = null;
    byte[] Image = null;

   // ImageIcon image2 = new ImageIcon("C:\\Users\\badr\\Documents\\NetBeansProjects\\UPLINE_GROUP\\src\\upline_group\\Ok-48.png");

    Date estimated_end_date = null;
    Date real_end_date = null;

    try {
        String sql = "select * from task WHERE id_project='" + id_project1 + "' ORDER BY nom_task ASC";
        PST = conn.prepareStatement(sql);
        RS = PST.executeQuery();

        while (RS.next()) {
            try {
                String sql2 = "select * from image ";
                PST2 = conn2.prepareStatement(sql2);
                RS2 = PST2.executeQuery();

                while (RS2.next()) {

                    if (RS.getString("real_start_date") == null && RS.getString("real_end_date") == null) {
                        status = "0(Non Démarrée)";
                        //tendance = "0(Non Démarrée)";
                        Image = RS2.getBytes("non");
                    }
                    if (RS.getString("real_start_date") != null && RS.getString("real_end_date") == null) {
                        status = "1(en cours)";
                       // tendance = "1(en cours)";
                        Image = RS2.getBytes("cours");
                    }
                    if (RS.getString("real_end_date") != null) {
                        status = "2(Terminé)";
                       // tendance = "2(Terminé)";
                        Image = RS2.getBytes("fini");
                    }

                }
            } catch (Exception e) {
                System.err.println(e);
            }

            estimated_end_date = RS.getDate("estimated_end_date");
            real_end_date = RS.getDate("real_end_date");
            model.addRow(new Object[]{RS.getString("nom_task"), RS.getDate("estimated_start_date"), RS.getDate("real_start_date"), estimated_end_date, real_end_date, status,Image});

        }
    } catch (Exception e) {
        System.err.println(e);
    }
    jTable1.setModel(model);

最佳答案

但是所有获得的都是图像的链接:


这意味着您将文本存储在该列中。

您有几个问题,我可以看到:

您的代码正在尝试读取图像,但是您需要在ImageIcon中存储TableModel。因此,您需要更改您的addRow(...)语句以使用:

addRow(..., new ImageIcon(image));


因此,您可以按希望它们在表中显示的顺序添加每个值。

修复以上语句后,图标将成为addRow(...)语句的第六个参数。但是,根据您的getColumnClass(...)方法,图标位于2列中。这对您来说并不奇怪吗?

10-07 19:06
查看更多