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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改从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;
    }
};

查看Table Row Rendering以获取更多信息和工作示例以帮助您入门。

以上是关于更改从jar文件中获取的jtable中特定行的颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何更改具有特定列值的 JTable 整行的颜色

每 10 秒更改特定行的颜色

根据列值更改 JTable 行的背景颜色

更改单元格颜色而不更改其他单元格中的颜色(Jtable)

如何更改 JTable 的空白空间颜色?

JTable/setDefaultRenderer 多选行