为 ROW 着色,并且仍然可以选择其后的其他行



我遇到了一个真正的大问题,它是如此之大,因为我到处搜索,但我找不到解决方案。

我想永远将整行涂成黄色。黄行表示客户已付款。之后,我仍然需要能够选择行(他们选择的行应该是蓝色的,其他的应该是白色的)来对它们做其他事情(更新、删除等)。但这一切都有点搞砸了,最后,我按下的每一行都变黄了,我不明白为什么。我正在使用自定义表单元格渲染器。

我每次按下一行时都必须证明该行是否已付款吗? 然后用黄色或蓝色着色?

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

我每次按下一行时都必须证明该行是否已付款吗? 然后用黄色或蓝色着色?

是的,

每次选择/取消选择该行时都会呈现该行。

请参阅表行呈现,了解一种允许您根据特定列中的值为整行着色的方法。

最新更新