我遇到了一个真正的大问题而且它太大了,因为我到处搜索但我找不到解决方案。
我想永远将整行染成黄色。黄色行表示客户已付款。在那之后,我仍然需要能够选择行(他们选择的应该是蓝色,其他的是白色)用它们做其他事情(更新,删除等)。但是这一切都搞砸了,最后,我按下的每一行都变黄了,我不明白为什么。我正在使用Custom tableCellRenderer。
如果该行已付款或不付款,我是否必须每次按一下?然后用黄色或蓝色着色?
teilnehmertable.setDefaultRenderer(Object.class, new MyTableCellRender(teilnehmertable.getSelectedRow()));
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://10.0.0.1:3306/askoedb", "name", "pw");
stmt = con.createStatement();
rs1 = stmt.executeQuery("SELECT bezahlt FROM askoedb.teilnehmer");
while (rs1.next()) {
System.out.println(rs1.getString(1));
if (rs1.getString(1) != null) {
if (selectedRow != -1) {
if (row == selectedRow) {
setForeground(Color.black);
setBackground(Color.yellow);
} else {
setForeground(Color.black);
setBackground(Color.white);
}
}
setText(value != null ? value.toString() : "");
} else {
if (selectedRow != -1) {
if (row == selectedRow) {
setForeground(Color.white);
setBackground(Color.blue);
} else {
setForeground(Color.black);
setBackground(Color.white);
}
}
}
}
return this;
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
con.close();
} catch (SQLException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
return this;
}
答案 0 :(得分:1)
如果该行已付款或不付款,我是否必须每次按行?然后用黄色或蓝色着色它?
是的,每次选择/取消选择时都会渲染行。
有关一种方法,请参阅Table Row Rendering,该方法允许您根据特定列中的值为整行着色。