java - 在列类中定义整数会中断/跳过表单元格渲染器吗?

标签 java tablecellrenderer

在设法通过定义列类对我的列进行排序后 - 我的单元格渲染现在仅适用于包含字符串值的列而不适用于整数列?

This is what it looks like: ("% of target reached" is the Integer Column seen as white - should not be white)

这向您展示了字符串和整数类的列类定义:

    JTable  compTable5 = new JTable();
    compTable5.setEnabled(false);
    DefaultTableModel model5 = new DefaultTableModel(){
        @Override
        public Class getColumnClass(int column) {
            switch (column) {
                case 0:
                    return String.class;
                case 1:
                    return Integer.class;

                default:
                    return String.class;

            }
        }
    };

这是渲染器

compTable5.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
        @Override
        public Component getTableCellRendererComponent(JTable table,
                                                       Object value, boolean isSelected, boolean hasFocus, int row, int col) {

            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);

            int status = (int)table.getValueAt(row, 1);
            String status2 = (String)table.getValueAt(row, 5);

            if ("Not Used".equals(status2)) {setBackground(Color.lightGray);setForeground(Color.black);}
            else if (status2.equals("Priority 1")) {setBackground(scaleRed);}
            else if ( status == 0 && !status2.equals("Working") && !status2.equals("Not Used") && !status2.equals("Priority 1")) {setBackground(pink);setForeground(Color.black);}
            else if (status < 20) {setBackground(scaleRed);}
            else if (status >= 20 && status < 40) {setBackground(scaleOrange);setForeground(Color.black);}
            else if (status >= 40 && status < 60) {setBackground(scaleYellow);setForeground(Color.black);}
            else if (status >= 60 && status < 80) {setBackground(scaleGreen1);setForeground(Color.black);}
            else if (status >= 80 && status < 100) {setBackground(scaleGreen2);setForeground(Color.black);}
            else if (status > 100) {setBackground(scaleBlue);setForeground(Color.white);}
            else {
                setBackground(table.getBackground());
                setForeground(table.getForeground());
            }

            return this;
        }
    });

我是一个 Java 菜鸟,这是我的第一篇 stackoverflow 帖子,感谢你们在这个论坛上给予我的所有帮助!

最佳答案

JTable 很可能对整数(和 double 、 float 、长整型)使用特殊的 TableCellRenderer 来显示值右对齐而不是默认的左对齐。

您为 Object.class 绑定(bind)了您的 DefaultTableCellRenderer,如果没有找到更专门的 TableCellRenderer,这是一个回退。

尝试将您的 DefaultTableCellRenderer 绑定(bind)到 Object.classInteger.class,如下所示:

DefaultTableCellRenderer myRenderer = new DefaultTableCellRenderer() {
  // all your code for the cell renderer, as in your example
}
compTable5.setDefaultRenderer(Object.class, myRenderer);
compTable5.setDefaultRenderer(Integer.class, myRenderer);

关于java - 在列类中定义整数会中断/跳过表单元格渲染器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42783179/

相关文章:

java - 在 Android 上使用 HTTP POST XML

java - spring mvc 中的资源

java - J表: Complex Cell Renderer

java - 如何使用DefaultCellEditor使JTable的列仅获取数字并在点后用两个符号对它们进行四舍五入?

java - JTable 单元格重叠

java - 为什么 +e 取消而 -e 不取消?

java - 如何从 HTTP POST 读取文件

Java - 变量作用域

java - JTable 中的换行、右对齐、自动调整行高