Java中的TableModel:如何为不同的行指定不同的渲染器?

时间:2013-06-05 17:20:51

标签: java swing jtable tablecellrenderer tablecelleditor

我正在使用AbstractTableModel为项目制作自定义TableModel,我需要找到一种方法,让某些行显示复选框,而不是其他行。我已经实现了一个getColumn方法,但我希望能够有一个复选框不显示,除非达到另一列中的某个条件(例如,如果某个特定行所代表的对象是一个灯泡,而不是,比方说,烤面包机,给用户一个复选框,打开或关闭灯。)

我尝试使用getValueAt并传递null或字符串而不是布尔对象,希望Swing不会呈现复选框。它没有,但它也会抛出一组令人讨厌的ClassCastExceptions来尝试将String转换为布尔值。

有没有人对如何做这样的事情有任何想法?

1 个答案:

答案 0 :(得分:1)

使用单元格渲染器显示Swing JTable中的列。您应该阅读Java教程中的How to Use Tables,其中有一节描述了该机制的工作原理。这就是自定义单元格渲染器的核心方法如下所示:

public Component getTableCellRendererComponent(JTable table, Object color,
                        boolean isSelected, boolean hasFocus,
                        int row, int column) {

此方法的任务是为框架将使用的特定行和列选择并准备Component(通过设置所需的颜色,字体,图像......){{1上下文。有一个Graphics可能没有太多的自定义代码(参见教程)。请注意,此呈现机制是Swing开发人员选择的优化。

您还可以在Swing Hacks中了解有关自定义Swing组件的大量信息。这些示例并不是特别精心设计的代码,只是展示了如何创造性地使用Swing API。

祝你好运!

示例(见评论):

DefaultTableCellRenderer