Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试为JTable中的特定单元格着色。。。GetTableCellRenderer组件覆盖_Java_Swing_Jtable_Cell_Cellrenderer - Fatal编程技术网

Java 正在尝试为JTable中的特定单元格着色。。。GetTableCellRenderer组件覆盖

Java 正在尝试为JTable中的特定单元格着色。。。GetTableCellRenderer组件覆盖,java,swing,jtable,cell,cellrenderer,Java,Swing,Jtable,Cell,Cellrenderer,所以我知道这可能是一个重复的问题,但我已经看过了很多已经在这里,他们似乎没有为我工作,所以我想我会张贴我自己的,希望其他一些有问题的人会发现这也有帮助 这是我的密码 table.getColumn("Name").setCellRenderer( new DefaultTableCellRenderer() { @Override public Component getTab

所以我知道这可能是一个重复的问题,但我已经看过了很多已经在这里,他们似乎没有为我工作,所以我想我会张贴我自己的,希望其他一些有问题的人会发现这也有帮助

这是我的密码

    table.getColumn("Name").setCellRenderer(
                new DefaultTableCellRenderer() {
                    @Override
                    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                        setText(value.toString());

                        if (row==3) 
                        {
                            setForeground(Color.RED);
                        }
                        return this;
                    }
                }
            );
以下是JFrame中显示的内容。正如你所看到的,我试图只给“Name”列第三行的文本上色,但它给整行上色。

有什么建议吗? 谢谢
迦南

列“名称”的渲染是唯一的。当行为3时,您将红色设置为前景色,但不会为其他行重置它,所以当调用“画师”时,它始终绘制红色。 行为3时必须设置红色,但在其他情况下也必须重置原始颜色

已编辑:已执行版本。现在,将备份原始前景色,并使用super与其他列一样进行渲染

           table.getColumn("Name").setCellRenderer(
            new DefaultTableCellRenderer() {

        Color originalColor = null;

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (originalColor == null) {
                originalColor = getForeground();
            }
            if (value == null) {
                renderer.setText("");
            } else {
                renderer.setText(value.toString());
            }

            if (row == 3) {
                renderer.setForeground(Color.RED);
            } else {
                renderer.setForeground(originalColor); // Retore original color
            }
            return renderer;
        }
    });

“名称”列的渲染是唯一的。当行为3时,您将红色设置为前景色,但不会为其他行重置它,所以当调用“画师”时,它始终绘制红色。 行为3时必须设置红色,但在其他情况下也必须重置原始颜色

已编辑:已执行版本。现在,将备份原始前景色,并使用super与其他列一样进行渲染

           table.getColumn("Name").setCellRenderer(
            new DefaultTableCellRenderer() {

        Color originalColor = null;

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (originalColor == null) {
                originalColor = getForeground();
            }
            if (value == null) {
                renderer.setText("");
            } else {
                renderer.setText(value.toString());
            }

            if (row == 3) {
                renderer.setForeground(Color.RED);
            } else {
                renderer.setForeground(originalColor); // Retore original color
            }
            return renderer;
        }
    });

谢谢工作得很好!还有一个问题,是否存在setForeground(null)?我想将row==3设置为红色,但不想在其他{括号中执行任何操作。我只希望它在那里基本上不执行任何操作,但前景黑色将其加粗,谢谢!基本上Color.black不是原始颜色1。永远不要在XxxRenderer中设置值,顺便说一句,JTable在单元格或XxxTableModel 2中没有任何空值问题。renderer.setForeground(originalColor);而不是originalColor应该是myTable.getForeground()3。@Canan Linder,你说的是什么?一点都不正确好的渲染器每周在这个论坛上发布两/三次Hanks!非常好!还有一个问题,是否有setForeground(null)?我想将row==3设置为红色,但不想在其他{括号中执行任何操作。我只希望它在那里基本上不执行任何操作,但前景黑色将其加粗,谢谢!基本上Color.black不是原始颜色1。永远不要在XxxRenderer中设置值,顺便说一句,JTable在单元格或XxxTableModel 2中没有任何空值问题。renderer.setForeground(originalColor);而不是originalColor应该是myTable.getForeground()3。@Canan Linder请告诉我你说的什么根本不是真的好的渲染器每周在这个论坛上发布两/三次以上