0
我有一个真正的大问题,它非常大,因为我到处搜索,但我找不到解决方案。为某个行着色并仍然可以在其后选择其他行?
我想将整行着色为黄色。 Yellow Row表示客户已经付款。在那之后,我仍然需要能够选择行(他们选择的应该是蓝色,其他的是白色的)来做其他事情(更新,删除等)。但这一切都只是变得混乱起来,最后,我按下的每一行都变黄,我不明白为什么。我正在使用自定义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;
}
曼努埃尔你应该提供[SSCCE](http://www.sscce.org)。演示问题的有效代码。你有什么尝试。 – nachokk
请提供您的Custom tableCellRenderer的代码,问题可能出在它的逻辑上。很可能黄永远应该是一些条件,如“布尔支付”,而不是基于选择/行位置。 – porfiriopartida
JTable一次又一次地为每个单元格使用相同的单元格渲染器。我的猜测是,如果付费条件为true,您无法看到自己的代码是将背景设置为黄色,但是当您没有编写“else”块来将渲染器的颜色设置为JTable的默认背景时付费条件是错误的。 – VGR