java - 如何使用行和列索引(TableCellRenderer)设置 JTable 中特定单元格的颜色

标签 java swing jtable tablecellrenderer

我创建了以下TableCellRenderer来设置JTable中特定单元格的颜色。问题是它设置了整个列的颜色。如何定义行?

package run;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class test4 {


    /**
     * @param args
     */
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI(); 
            }
        });     
    }

    private static void createAndShowGUI() {
        gtest t = new gtest("");
        t.pack();
        t.setVisible(true);
        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.setLocationRelativeTo(null);
    }


}

class gtest extends JFrame
{

    private static JTable table;
    private int index;

    public gtest(String title)
    {
        Object cols[] = {"A","B"};
        double data[][] = {{2,10},{5,20},{20,11}};
        table = new JTable(3,2);

        for (int i = 0; i< data.length; i++)
        {
            for (int j=1; j<cols.length; i++)
            {
                double val = data[i][j] + 5*data[i][j]-1;
                table.getColumnModel().getColumn(j).setCellRenderer(new ColorRenderer());
                // here I want to put a Thread.sleep or something similar to
                // visualize the filling out of a table
            }
        }
        add(table);

    }
}

class ColorRenderer extends JLabel implements TableCellRenderer  {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public ColorRenderer() {
        setOpaque(true);
    }

    public Component getTableCellRendererComponent(
                            JTable table, Object value,
                            boolean isSelected, boolean hasFocus,
                            int row, int column) {
      setText(value.toString());
      setFont(new Font("SansSerif", Font.PLAIN, 10));
      setBackground(Color.lightGray);
      return this;
    }
}

最佳答案

TableCellRenderer 设置为整列,要仅更改某些行,您需要在 getTableCellRendererComponent() 方法中实现行号验证。

例如 rowIndex = 1 的更改颜色:

setBackground(row == 1 ? Color.lightGray : table.getBackground());

阅读 TableCellRenderer 的文档.

关于java - 如何使用行和列索引(TableCellRenderer)设置 JTable 中特定单元格的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234989/

相关文章:

java - 在没有清晰背景的情况下旋转图像

java - Repaint 方法编译不正确

java - JLabel 中的多行文本

java - 如何获取 JTable 中的文本?

java - 带有标题行和列的 JTable

java - 从jtable导出到excel时如何合并列?使用 Apache POI

java - 我的 JDBC 有问题,但我不知道为什么

java - com.w3c.dom.Document without <?xml version ="1.0"encoding ="UTF-8"standalone ="no"?>

java - 使用 Java 的 Playframeowk 抛出 JPA 事务失败。由: there is no started appliaction引起

Java MouseListener - 进入和退出 JPanel 的事件