如何根据情况改变线条的颜色?

时间:2019-06-28 10:38:30

标签: swing

我的表看起来像这样,一切正常,一切都很好)我需要如果满足条件ARRIVAL = 0或DEPART = 0,则整行中的文本颜色是不同的颜色,例如红色或黑色,没关系,我不知道如何更改它,也许很简单,我是新来的)我没有在其他问题中找到该问题的答案

 private void setTableSettingsReport() {

    jTblReport.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    jTblReport.setRowSelectionAllowed(true);
    jTblReport.setAutoCreateRowSorter(true);
    jTblReport.getTableHeader().setReorderingAllowed(false);

    String[] dbColNames = new String[13];
    dbColNames[0] = "ID";
    dbColNames[1] = "Имя";
    dbColNames[2] = "Фамилия";
    dbColNames[3] = "Отчество";
    dbColNames[4] = "Дата прихода с ";
    dbColNames[5] = "Дата прихода до";
    dbColNames[6] = "Прибытие";
    dbColNames[7] = "Дата ухода с ";
    dbColNames[8] = "Дата ухода до";
    dbColNames[9] = "Убытие";
    dbColNames[10] = "Причина опоздания";
    dbColNames[11] = "Причина раннего ухода";
    dbColNames[12] = "ID лица";

    // dbColNames[8] = "Дата начала";
    //  dbColNames[9] = "Дата окончания";    
    tm.setColumnIdentifiers(dbColNames);
    jTblReport.setModel(tm);
    jTblReport.setSelectionForeground(Color.white);

    jTblReport.setSelectionBackground(Color.red);
    jTblReport.getColumnModel().getColumn(0).setPreferredWidth(10);
    jTblReport.getColumnModel().getColumn(1).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(2).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(3).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(4).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(5).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(6).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(7).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(8).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(9).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(10).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(10).setPreferredWidth(60);
    jTblReport.getColumnModel().getColumn(10).setPreferredWidth(60);

}

public void searchIdentificationsReport(boolean all) {
    int z = 0;
    while (z < tm.getRowCount()) {
        tm.removeRow(z);
    }
    Statement statement = null;
    try {
        statement = getDbConnection().createStatement();
        String sql = "select a.id, pr.p_name,pr.p_surname,pr.p_patronic, a.date_arrival_from,a.date_arrival_to, a.arrival,a.date_departure_from,a.date_departure_to, a.depart, a.arrival_comment, a.depart_comment,a.prsn_id "
                + "  FROM bio.persons pr, attendance a where pr.p_id=a.prsn_id and a.date<=CURDATE() ";
        if (cbPersons.getSelectedItem() != null && model.getSelectedItem() != null) {
            CodeValueDTO dto = (CodeValueDTO) model.getSelectedItem();
            sql += " and  pr.p_id='" + dto.getId() + "'";
        }
        if (!all) {
            sql += " and (ARRIVAL =0 or DEPART=0)";


        }

        statement.execute(sql);
        ResultSet rs = statement.getResultSet();


        while (rs.next()) {
            Object[] objects = new Object[13];
            for (int i = 0; i < 13; i++) {
                objects[i] = rs.getObject(i + 1);
            }
            if (rs.getInt(7) == 0) {
                objects[6] = "Нет";
            } else {
                objects[6] = "Да";
            }

            if (rs.getInt(10) == 0) {
                objects[9] = "Нет";
            } else {
                objects[9] = "Да";
            }

            tm.addRow(objects);
        }

    } catch (SQLException ex) {
        ex.printStackTrace();
    } finally {
        try {
            statement.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

}

dbColNames [6] =“Прибытие”; dbColNames [9] =“Убытие”; 这些是相同的字段,具体取决于您需要更改整行的颜色

1 个答案:

答案 0 :(得分:2)

您需要为此JTable设置一个自己的单元格渲染器(我假设您正在使用JTable)。

public class MyCellRenderer extends DefaultTableCellRenderer{
private int columNum = 0;

public MyCellRenderer(int columNum) {
    // TODO Auto-generated constructor stub
    this.columNum = columNum;
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
        int row, int column) {
    // TODO Auto-generated method stub
    Object object = table.getValueAt(row, this.columNum);

    if(object.equals("yourValue")) {
        setBackground(Color.RED);
    }
    return this;
}

}

您需要在创建渲染器后立即将其设置为jtable。

jTabReport.setDefaultRenderer(Object.class, new MyCellRenderer(3));

为此,您将创建一个此类,并从DefaultTableCellRenderer扩展并覆盖getTableCellRendererComponent。 构造函数通过存储您的“ arival”信息的columnumber。对于该行中的每个单元格,请检查指定的列是否包含arival = 0(该列必须始终为相同的列)。如果是这样,请设置背景。 “ yourValue”只是一个例子。