【问题标题】:Change JTable's entire row colour while adding rows from MySQL从 MySQL 添加行时更改 JTable 的整行颜色
【发布时间】:2016-12-01 22:55:56
【问题描述】:

我有一个像下面这样的 JPanel

当用户在绘图表(左)中选择一行时,事务表(右)中的数据是从 MySQL 结果集中生成的。代码如下:

        tableModelTran.getDataVector().removeAllElements();
        if (rs.isBeforeFirst()) {
            while (rs.next()) {
                java.util.Vector data = new java.util.Vector();
                data.add(rs.getString(1));
                data.add(rs.getString(2));
                data.add(new java.text.SimpleDateFormat("dd/MM/yyyy").format(rs.getDate(3)));
                data.add(String.valueOf(new java.text.SimpleDateFormat("MMMM yyyy").format(rs.getDate(3))).toUpperCase());
                data.add(rs.getString(4));
                data.add(rs.getString(5));
                data.add(rs.getString(6));
                data.add(rs.getBoolean(7));
                tableModelTran.addRow(data);
            }

            performTotals();
        }

如果勾选了“已验证”列,我想将行的颜色更改为绿色,如果没有勾选,则保持不着色。此外,如果用户更改列的值,颜色应该相应更新。感谢您提供任何和所有帮助。

编辑:

我创建了一个类并将其添加到我的构造函数中,如下所示:

static class ColorRenderer extends javax.swing.table.DefaultTableCellRenderer {

    @Override
    public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        java.awt.Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if (value.equals(true)) {
            c.setBackground(java.awt.Color.GREEN);
        }

        return c;
    } 


public PlotDetailsWindow() {
    initComponents();
    ....
    ....
    transactionTable.setDefaultRenderer(Boolean.class, new ColorRenderer());
    ....
    ....
}

现在,每当我单击左侧表格中的选择一行时,如果第一个值为 false,它不会更改颜色,但如果为 true,它只会将“已验证”列更改为绿色,然后它不会不管值是真还是假,它总是绿色的。此外,复选框现在变为真/假。

【问题讨论】:

    标签: java mysql swing jtable


    【解决方案1】:

    如果勾选了“已验证”列,我想将行的颜色更改为绿色

    查看Table Row Rendering

    它展示了如何覆盖JTableprepareRenderer(...) 方法以根据行中的数据为整行着色。

    重写此方法的基本结构如下:

    JTable table = new JTable(...)
    {
        public Component prepareRenderer(
            TableCellRenderer renderer, int row, int column)
        {
            Component c = super.prepareRenderer(renderer, row, column);
    
            //  add custom rendering here
    
            return c;
        }
    };
    

    【讨论】:

    • 以及如何将这段代码添加到我在 netbeans 中的表中?
    • @HMH,我从来没有使用过 IDE,所以我不能告诉你怎么做。您已经获得了工作示例,向您展示了如何在没有 IDE 的情况下执行此操作。了解如何在不使用 IDE 的情况下编写 Swing GUI。如果您需要迁移到不同的 IDE,代码将更加可移植。这样您就可以花时间学习 Java 而不是学习 IDE。 IDE 只能用于构建项目代码和调试代码。
    • 很抱歉,但这对解决我的问题没有多大帮助。不过感谢您的贡献。
    • @HMH, that didn't help me much - 如果您从链接下载示例,我会为您提供工作代码。这怎么没有帮助?您的问题是关于如何为表格中的行着色,并且您得到了答案,因此应该“接受”该问题,以便人们知道问题已解决。如果您在使用 NetBeans IDE 时不知道如何扩展类,那么您需要询问有关 NetBeans IDE 的问题!
    猜你喜欢
    • 2016-09-22
    • 2015-10-13
    • 2013-05-28
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2019-09-09
    相关资源
    最近更新 更多