如何在没有单例的情况下使用JTable单元格渲染器?

时间:2015-01-19 20:55:00

标签: java swing jtable singleton

我使用DefaultTableCellRenderer为表格的行着色。行的颜色不是显示的表数据中固有的,它是用于构建表的基础数据的属性。我使用表模型从底层数据提供单元格数据(显式地传递给表模型,并小心地避免线程问题。)

在渲染器中,我需要访问基础数据或表模型。目前我可以使用静态或单身,但未来可能不太理想。

从渲染器访问数据的正确方法是什么?我的渲染器是这样的:

class SummaryTableCellRenderer extends DefaultTableCellRenderer {
    private static final long serialVersionUID = 1L;
    public Component getTableCellRendererComponent(JTable table, Object value, boolean   isSelected, boolean hasFocus, int row, int col) {

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

        ... access my data here to derive color ...

        c.setBackground(color);
        return c; 
    } 
}

我希望我可以使用table.getModel()来获取我的表模型,但是这会返回一个我无法转换为我的表模型的类型(它扩展了AbstractTableModel,而不是TableModel,后者是一个界面。)

我出于兼容性原因使用JavaSE-1.6,以防万一。谢谢!

1 个答案:

答案 0 :(得分:2)

getTableCellRendererComponent方法在调用时传递JTable的引用...

public Component getTableCellRendererComponent(JTable table, Object value, boolean   isSelected, boolean hasFocus, int row, int col) {

为什么不用它来获取对TableModel ...

的引用
TableModel model = table.getModel();

现在,根据您的需要,您可能需要将其投放到TableModel

的实施中