我的表看起来像这样,一切正常,一切都很好)我需要如果满足条件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] =“Убытие”; 这些是相同的字段,具体取决于您需要更改整行的颜色
答案 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”只是一个例子。