如何在填写表格时在jtable中设置图标?

时间:2017-04-13 11:12:09

标签: java swing jtable

我试图根据条件在某个列中放置一个图标,但所有get都是图像的链接。

这是如何启动表格代码的:

    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);

1 个答案:

答案 0 :(得分:2)

  

但所有得到的都是图片的链接:

然后这意味着您要在该列中存储文本。

我可以看到几个问题:

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

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

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

当您修复上述语句时,看起来Icon将是addRow(...)语句的第6个参数。但是,根据您的getColumnClass(...)方法,图标位于第2列。这对你来说不是很奇怪吗?