刷新 JTable 中的行的背景颜色
问题:
尝试刷新背景颜色时JTable 中的一行,它仅在第一次迭代时有效并且失败
解决方案:
出现此问题是因为 ColorTable 类中的 setRowColor 方法没有重置后续行的背景颜色。要解决此问题,应修改代码如下:
public void resetColor(Color color) { for (int i = 0; i < this.getRowCount(); i++) { // Reset all rows to the specified color this.setRowColor(i, color); } }
此外,为了防止所选行被着色,应在prepareRenderer方法中添加以下行:
if (rowSelection != null && isRowSelected(row)) { continue; }
这可确保所选行保持其默认背景颜色。
示例代码:
// Import necessary libraries... public class ColorTable extends JTable { private static final long serialVersionUID = 1L; private Map rowColor = new HashMap(); private Map columnColor = new HashMap(); private Color cellColor; private Color defaultColor; public ColorTable(TableModel model) { super(model); } public void setRowColor(int row, Color c) { rowColor.put(new Integer(row), c); } // ... Other methods remain the same ... @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); if (defaultColor == null) { defaultColor = c.getBackground(); } // Color order is as follows: // rowSelection, checkBox toggle for row color, column color, cell color if (rowSelection != null && isRowSelected(row)) { continue; } // ... return c; } // ... Other methods remain the same ... } // ... Other code remains the same ...
以上是如何刷新JTable中某行的背景颜色?的详细内容。更多信息请关注PHP中文网其他相关文章!