我喜欢创建一个带有复选框和一个或两个可选文本字段的单元格。
如果我点击复选框,文本字段就会显示出来。我试图制作一张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;
}
}
答案 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对象。