JTable with multiple elements in one cell
我喜欢创建一个带有复选框和一两个可选文本字段的单元格。
如果我点击复选框,文本字段就会可见。我试图制作一张 ASCII 图片应该是什么样子:
1 2 3 | [ ] [X] [some string] [X] [value1] [value2] |
我知道如何创建自定义渲染器,但我不确定如何返回多个元素。如果我有一个复选框的渲染器,我只返回 JCheckBox:
1 2 3 4 5 6 7 8 | 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; } } |
@Thomas 等人。关于区分模型和视图是正确的。您的模型包括一个布尔状态和一些相应的文本;您的视图是一个可以切换的
在此示例中,类
您必须返回一个包含多个其他组件的组件(在您的情况下可能是 JPanel)。
参见下面的链接,其中 CellRenderer 返回多个条目(它是 ListCellRenderer,但基本相同)。
您还必须在表格模型中表示该结构,即单元格的值应该已经是布尔标志和其他值的组合。
您的 Renderer 类将必须返回一个父组件(如 uhm 所说,可能是一个 JPanel),您在该组件上还有其他对象:复选框、文本字段等。您的 tableModel 必须保存 Renderer 用来描绘的值这些组件中的每一个。例如,模型可能设置有一个数据对象列表,列表中的每个条目都包含一个布尔值以指示是否选中了复选框,一个文本字段数据的字符串等。你不能让一个表格直观地描绘一个有用的如果关联模型没有将其存储在某个地方,则摆动对象。