在JTable中是否有像getColumnClass这样的方法来设置特定于行的数据类型?

时间:2012-11-25 12:08:29

标签: jtable

我有一个带有两列的JTable:一个键名和值。在值列中,允许多种数据类型,如下图所示:

On the left are the keys and on the right the values (a simple "Map")

因此,在第1列中,我可能在第1行中有一个布尔值,在第2行中有一个字符串。但方法getColumnClass(...)只允许我为完整列设置数据类型。

有没有办法设置列行特定的数据类型?

问候, mythbu

1 个答案:

答案 0 :(得分:1)

同一列不能有两种数据类型。但对于你的情况,我的建议是使用渲染。

  1. 了解Editors and Renderers

  2. 将列数据类型定义为包含JPanel的组件类。

  3. 渲染列。您的Renderer类将Panel返回到列。它应该有constraint,基于此应该向Panel添加组件并返回Panel。

  4. 此示例显示了如何在这种情况下使用渲染。

    class PanelCellRenderer extends JPanel implements TableCellRenderer {
    public Component getTableCellRendererComponent(final JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
           // row number is used as a constraint.
            if(row == 0) {
                this.add( new JTextField("", 20));
            } else if(row == 1) {
                this.add( new JCheckBox());
            } else if(row == 2) {
                this.add( new JButton());
            } else {
                this.add( new JLabel("Row-4"));
            }
            return this;
       }
    }
    

    //输出:

    第一行是JTextField的面板。 同样,第2行,第3行有JCheckBoxJButton。 第4行有JLabel文字。

    Panel Containing Diff Components

    P.S:这只是一次尝试。即使我以前没有这样做过。如果我错了,请纠正我。