JTable在一个单元格中有多个元素

时间:2011-12-01 10:47:12

标签: java swing jtable

我喜欢创建一个带有复选框和一个或两个可选文本字段的单元格。

如果我点击复选框,文本字段就会显示出来。我试图制作一张ASCII图片,它应该是什么样子:

[ ]
[X] [some string]
[X] [value1] [value2]

我知道如何创建自定义渲染器,但我不知道如何返回多个元素。如果我有一个复选框的渲染器,我只返回JCheckBox:

class BooleanRenderer extends JCheckBox implements TableCellRenderer, UIResource
{
    public Component getTableCellRendererComponent(JTable table, Object value,
                           boolean isSelected, boolean hasFocus, int row, int column) {
        // doing some stuff...
        return this;
    }
}

4 个答案:

答案 0 :(得分:4)

你必须返回一个组件(在你的情况下可能是一个JPanel),它包含多个其他组件。

请参阅以下链接where a CellRenderer returns multiple entries(它是一个ListCellRenderer,但基础是相同的。)

答案 1 :(得分:4)

@Thomas 关于区分模型视图是正确的。您的模型包含布尔状态和一些相应的文本;您的视图是可以切换的JCheckBox和可以更改的文本。您既需要渲染器来显示模型的当前状态,也需要编辑器来允许更改状态。

在此example中,类Value保存所选状态和基础数据Double值。实施DataModel的{​​{1}}管理TableModel。请注意,编辑器和渲染器都使用公共List<Value>。相关课程java.text.MessageFormat可能有助于撰写复选框的文字。

答案 2 :(得分:2)

您还必须在表模型中表示该结构,即单元格的值应该已经是布尔标志和其他值的组合。

答案 3 :(得分:1)

你的Renderer类必须返回一个父组件(如uhm所说,可能是一个JPanel),你有其他对象:checkbox,textfields等。你的tableModel必须保存Renderer用来描绘的值每个组件。例如,可以使用List of data对象设置模型,列表中的每个条目都包含一个布尔值,用于指示是否选中了checkBox,textField数据的字符串等。您不能让Table在视觉上描绘出有用的如果关联模型没有将其存储在某个位置,则为Swing对象。