更改从jar文件中获取的jtable中特定行的颜色

我想更改从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)); } 

您需要实现渲染器并应用它。

 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; } } 
 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; } }; 

查看表行渲染以获取更多信息和工作示例以帮助您入门。