Java 给一行上色,之后还能选择其他行吗?

Java 给一行上色,之后还能选择其他行吗?,java,swing,jtable,Java,Swing,Jtable,我有一个真正的大问题,它是如此之大,因为我到处寻找,但我找不到解决办法 我想把整行永远涂成黄色。黄色行表示客户已付款。在那之后,我仍然需要能够选择行(它们选择的行应该是蓝色的,其他行应该是白色的)来处理它们(更新、删除等)。但一切都变得一团糟,最后,我刚刚按下的每一行都变成黄色,我不明白为什么。我正在使用自定义tableCellRenderer 我每次按一行时是否都要证明该行是否已付款?然后将其涂成黄色或蓝色? teilnehmertable.setDefaultRenderer(Object.

我有一个真正的大问题,它是如此之大,因为我到处寻找,但我找不到解决办法

我想把整行永远涂成黄色。黄色行表示客户已付款。在那之后,我仍然需要能够选择行(它们选择的行应该是蓝色的,其他行应该是白色的)来处理它们(更新、删除等)。但一切都变得一团糟,最后,我刚刚按下的每一行都变成黄色,我不明白为什么。我正在使用自定义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;
    }
我是否必须在每次按一行时证明该行是否已付款?然后把它涂成黄色或蓝色

是每次选中/取消选中该行时都会渲染该行


有关允许您根据特定列中的值为整行着色的方法,请参阅。

Manuel您应该提供一个。演示问题的有效代码。您尝试了什么。请提供自定义tableCellRenderer的代码,问题可能在于它的逻辑。最有可能的是,永久黄色应该是一些条件,如“布尔值已支付”,而不是基于选择/行位置。JTable对每个单元格反复使用相同的单元格渲染器。我猜,在看不到你的代码的情况下,如果付费条件为真,你将背景设置为黄色,但是当付费条件为false时,您没有编写
else
块来将渲染器的颜色设置为JTable的默认背景。您
TableModel
还必须存储每行的
paid
状态。我已经编辑了代码。我只是需要一些关于getTableCellRenderComponent方法的帮助。我已经阅读了文档,但它没有告诉我需要什么。如果设置table.setDefaultRender,该方法会被调用多少次?如果我做一个system.out.println,我会得到100次,我不知道为什么。。。