我想更改从jar文件中提取的jtable
中特定行的颜色
Statement stmt = myConn.createStatement();
String sqlQuery = ("Select * from ATTENDENCE where Class='"+c+"' AND Section='"+s+"' AND Date='"+date+"';");
ResultSet result = stmt.executeQuery(sqlQuery);
while(result.next())
{
String ad = result.getString("Status");
if (ad.equalsIgnoreCase("absent"))
{
setForeground(Color.red);
}
table_1.setModel(DbUtils.resultSetToTableModel(result));
}
答案 0 :(得分:0)
您需要实现渲染器并将其应用。
table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer());
类渲染器应该是这样的(例如):
class CustomRenderer extends DefaultTableCellRenderer
{
private static final long serialVersionUID = 6703872492730589499L;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(row == 0){
cellComponent.setBackground(Color.YELLOW);
} else if ( row == 1){
cellComponent.setBackground(Color.GRAY);
} else {
cellComponent.setBackground(Color.CYAN);
}
return cellComponent;
}
}
答案 1 :(得分:0)
String sqlQuery = ("Select * from ATTENDENCE where Class='"+c+"' AND Section='"+s+"' AND Date='"+date+"';");
不要使用字符串连接来构建SQL查询。这容易出错,难以阅读且难以维护。
您应该使用PreparedStatement
。这使您可以指定多个标记,然后可以将其替换为变量的值:
String sql = "Select * from Attendance where Class = ? and Section = ? and Date = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, c);
...
stmt.setDate(3, date);
ResultSet rs = stmt.executeQuery();
我想更改特定行的颜色
看起来您想根据行中的值为行着色。
渲染是在绘制表时完成的,而不是从数据库中获取数据时完成的。
执行此操作的一种方法是重写JTable的prepareRenderer(...)
方法。像这样:
JTable table = new JTable(...)
{
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
if (!isRowSelected(row))
{
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
String status = (String)getModel().getValueAt(modelRow, ???);
if ("absent".equals(status)) c.setBackground(Color.RED);
}
return c;
}
};
请查看Table Row Rendering,以获取更多信息和工作示例,以帮助您入门。