Java 改变JTable中某行的颜色

Java Changing the color of a certain row in JTable

答案: 我不允许 post 回答...竖起大拇指 Whosebug!!!

但是这里是:

天哪……

我做到了,实际上它比我想象的要容易....

这是我的解决方案:

tbl_needaction = new javax.swing.JTable()
    {
        public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
        {
            Date d = new Date();
            DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
            java.util.Date acdate = null;
            Component c = super.prepareRenderer(renderer, row, column);

            //  Color row based on a cell value

            if (!isRowSelected(row))
            {
                c.setBackground(getBackground());
                int modelRow = convertRowIndexToModel(row);
                String sd = "";
                sd = (String)getModel().getValueAt(modelRow, 5);
                try {
                    acdate = df.parse(sd);
                } catch (ParseException ex) {
                    Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
                }

                if (d.compareTo(acdate)>=0){
                        c.setBackground(Color.RED);
                }
            }

            return c;
        }
    };

我不得不通过 NotePad++ 编辑它,因为 NetBeans 不允许我编辑自动生成的 initComponents()


问题: 我知道,有很多关于这个问题的示例和教程,但是 none 似乎对我有用....

我从 sql 数据库中获取数据,我在 JTable 中显示该数据。有一个名为 "ActionPoint" 的日期。现在我想将每一行标记为红色,其中 "ActionPoint" 等于今天或比今天 "smaller"。

我今天要与我的 jTable 中 ebery 行的 "ActionPoint" 进行比较的代码:

for(int row = 0;row < dbApplicantsTableModel.getRowCount();row++) {

            String sd = "";
            sd = (String) dbApplicantsTableModel.getValueAt(row, 5);
            try {
                acdate = df.parse(sd);
            } catch (ParseException ex) {
                Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (acdate.compareTo(d)<=0){

            }


    }

所以我应该把我的 "row" 涂成红色。

谁能提供一个方法,简单地获取一行,然后将这一行的背景设置为红色?

编辑:

现在我的代码如下所示:

for(int row = 0;row < dbApplicantsTableModel.getRowCount();row++) {


            String sd = "";
            sd = (String) dbApplicantsTableModel.getValueAt(row, 5);
            try {
                acdate = df.parse(sd);
            } catch (ParseException ex) {
                Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (acdate.compareTo(d)<=0){
                dbApplicantsTableModel.setRowColour(row, Color.RED);
            }

但是他没有将任何背景设置为红色!

遗憾的是我需要 10 到 post 图片的声誉 -.-

i want to mark every row red where the "ActionPoint" equals today oder is "smaller" than today.

查看 Table Row Rendering 以了解解决此问题的简单方法。该方法覆盖了 JTable 的 prepareRenderer(...) 方法,因此您可以使用简单的 "if statement".

在一个地方添加逻辑