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; } } 

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

在此示例中 ,类Value包含选定状态和基础数据, Double值。 实现TableModelDataModel管理List 。 请注意,编辑器和渲染器都使用常见的java.text.DecimalFormat 。 相关类java.text.MessageFormat在编写复选框的文本时可能很有用。

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

请参阅下面的链接,其中CellRenderer返回多个条目 (它是ListCellRenderer,但基础是相同的)。

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

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