2011-12-02 94 views
3

我有JTable。其中我有几列。在其中3我有JComboBox(每列的每个单元都有其独特JComboBox - 即整个第1列 - “苹果”,“bannana”;第2列 - “红”,“蓝”;第3列 - “猫”,“狗” )。在节目开始时,我希望它们是空的。稍后几个行动事件后,我正在填补他们。问题是,仅为每列添加相同值的JComboBox是不够的。因为在将JComboBox添加到JTable之后,必须执行TableCellRenderer并将其扩展为DefaultCellEditor,否则在表中看不到JComboBox,除非您单击它(TableCellRenderer错误),而不是comboBox,您只需在单元格中获取Object.toString()行DefaultCellRenderer错误)。所以,我应该怎么处理JComboBoxTableCellRendererDefaultCellEditor这样我就可以动态地全JComboBox这是JTable变化值。JTable,JComboBox动态值

+0

听起来像你这样做不对(或我误解:-) - 你从来没有在一个_component_细胞。相反,你有一个模型,其中保存_data_和呈现器/编辑器在表上滋润数据 – kleopatra

+0

所以你认为在表中我应该举例如字符串[]和当我覆盖渲染/编辑器我得到它可视化? – Minutis

回答

3

还有一件事你应该考虑。它正在使用一个模型。该模型将举行苹果,香蕉和猫和狗。 JTable和JComboBox分别有AbstractTableModelComboBoxModel。查看教程中的示例。

+0

就像我前面提到过的两次,如果您在一个组合框中选择了值,那么所有具有相同模型(全部列)的组合框都会被选中,并且具有相同的值。 – Minutis

+0

每个JComboBox应该有它自己的模型。 –

+0

好的,那么我应该如何在800个类似的JComboBoxes中插入值,而不必在每个JComboBox中进行更改?现在我改变它为一个模型,并且所有组合框都得到它。 – Minutis

0

在我看来,你就必须同时覆盖的TableCellRenderer和DefaultCellEditor返回相同的JComboBox。因此,您可以将JComboBox作为参数传递给TableCellRenderer和DefaultCellEditor,然后让getCompleteBox或getEditor例程返回该类的JComboBox。

+1

不太清楚你的意思是“相同的JComboBox” - 如果你真的(因为我猜)是指“同一个实例”,那么这是错误的。永远不会在编辑器和渲染器中共享相同的组件实例! – kleopatra

+0

kleopatra,这是为什么?为什么我不应该分享它?我应该使用相同型号的2个实例还是smth?但是然后选择会变得复杂,正如我上面提到的,如果您在一个组合框中选择了值,那么具有相同模型(所有列)的所有组合框都将以相同的值进行选择。 – Minutis

+0

其实,我不认为渲染器中的组合框会起作用,因为渲染器只是创建图形然后被复制。然而在编辑器中,一次只显示一个,所以你不需要很多副本 - 编辑器只需将它与必要的值和当前选择一起播种。 – vextorspace

2

请阅读Using a Combo Box as an Editor,因为JTable的JComboBox的认识为渲染器和编辑器也实例here,和例如约EachRowEditor

+0

谢谢你的帮助。但仍然存在问题。我在一个柱子中为所有JComboBox使用一个模型。当我填写或删除值是可以的。但是,如果我在一个单元格中选择一个组合框,则所有列都选择相同的值。 – Minutis

+0

'我在一个colum中为所有JComboBox使用了一个模型',它是正确和正确的输出,但是为了重新分配代码,你必须将它分离到分离的Models中,否则你必须将项目从硬编码范围1-10中分离到COmboBOxModel ,11-20等。那不是个好主意...... – mKorbel

+0

对不起,没有真正理解你的意思。问题不在于增加值。如果我使用一个模型,我可以像我想要的那样添加数值(在所有JComboBox's中的一列中,更改都是精确地)。但问题是,当我在一个JComboBox中选择任何内容时,每个具有相同模型的其他JComboBox都会选择相同的值。 – Minutis