Java更改JTable中某一行的颜色

时间:2015-02-23 15:16:35

标签: java swing colors jtable row

解答: 我不允许发布答案......赞成stackoverflow !!!

但这是:

神圣的怪胎......

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

这是我的解决方案:

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()


问题: 我知道,这个问题有很多很多例子和教程,但它们似乎都不适合我....

我从一个我在JTable中显示的sql-database中获取数据。有一个名为“ActionPoint”的日期。现在我想将每一行标记为“ActionPoint”等于今天的每一行都比现在“更小”。

我的代码今天与我的jTable中的“行动点”进行了比较:

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){

            }


    }

所以我应该让我的“行”现在应该涂成红色。

任何人都可以提供一个简单获取行的方法,然后将该特定行的背景设置为红色吗?

编辑:

现在我的代码看起来像这样:

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的声望才能发布图片-.-

1 个答案:

答案 0 :(得分:0)

  

我想将每一行标记为红色,其中&#34; ActionPoint&#34;等于今天奥德是&#34;更小&#34;比今天。

查看Table Row Rendering以获得解决此问题的简便方法。该方法会覆盖JTable的prepareRenderer(...)方法,因此您可以使用简单的&#34; if语句在#c;中添加逻辑。