我有一个类似下面的JPanel
当用户在绘图表(LEFT)中选择一行时,事务表(RIGHT)中的数据是从MySQL结果集生成的。代码如下:
tableModelTran.getDataVector().removeAllElements();
if (rs.isBeforeFirst()) {
while (rs.next()) {
java.util.Vector data = new java.util.Vector();
data.add(rs.getString(1));
data.add(rs.getString(2));
data.add(new java.text.SimpleDateFormat("dd/MM/yyyy").format(rs.getDate(3)));
data.add(String.valueOf(new java.text.SimpleDateFormat("MMMM yyyy").format(rs.getDate(3))).toUpperCase());
data.add(rs.getString(4));
data.add(rs.getString(5));
data.add(rs.getString(6));
data.add(rs.getBoolean(7));
tableModelTran.addRow(data);
}
performTotals();
}
如果经过验证,我想将行的颜色更改为绿色。如果不是,则勾选列并保持无色。此外,如果用户更改列的值,则颜色应相应更新。任何和所有的帮助表示赞赏。
编辑:
我创建了一个类并将其添加到我的构造函数中,如下所示:
static class ColorRenderer extends javax.swing.table.DefaultTableCellRenderer {
@Override
public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
java.awt.Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (value.equals(true)) {
c.setBackground(java.awt.Color.GREEN);
}
return c;
}
public PlotDetailsWindow() {
initComponents();
....
....
transactionTable.setDefaultRenderer(Boolean.class, new ColorRenderer());
....
....
}
现在每当我点击左侧表格中的一行时,如果第一个值为false,则不会改变颜色,但如果为真,则只会更改“已验证”。列为绿色,然后如果值为true或false则无关紧要,它将始终为绿色。此外,复选框现在变为true / false。
答案 0 :(得分:3)
如果经过验证,我想将行的颜色更改为绿色。列已打勾
它显示如何覆盖prepareRenderer(...)
JTable
方法,根据行中的数据为整行着色。
覆盖此方法的基本结构如下:
JTable table = new JTable(...)
{
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// add custom rendering here
return c;
}
};