JTable设置一列中某一个单元格是 String类型,其他均为Boolean类型 5

已经将整列设置为Boolean类型,出现勾选框,但某一个单元格内不能出现勾选框,需要设置成String,如何操作... 已经将整列设置为Boolean类型,出现勾选框,但某一个单元格内不能出现勾选框,需要设置成String,如何操作 展开
 我来答
jamxval
2014-04-19 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1428万
展开全部

出现什么这个是由当前的 cell editor/render 决定的。


先说说,当不是编辑状态时,格子中的数据显示出来的过程中”Rendering" 煊染,这时表格准备显示一个单元格之前会询问这个 Table 当前格子的 cell render 是什么,默认地在我们没有定制时它会回答“这个格子的 render 是 JLabel ”,这时就会用 JLabel 来显示数据,也就是显示成了灰色的文本,当我们定制过了 Render 之后假设我们希望是 checkbox 我们回答是 Checkbox 后需要我们把传入的 true/false/Y/N 值转换成 checkbox 的状态,同样道理如果是下拉框也是类似的转换过程。


再说说,当编辑状态时,当我们用鼠标点击一个单元格,表格接到事件后会询问当前单元格是否允许编辑,当不允许时什么都不做,当允许时,它会再询问当前单元格的 cell editor 是什么?我们回答 checkbox 时我们就把值转换成 checkbox 的选中与不选中的状态再返回它,这时表格就把一个 checkbox 显示出来了。


从上面两点,我们明白了,每次 table cell render 或 table cell editor 调用 getCellRender (table, row, column)  或 getCellEditor (table, row, column) 时我们根据 row / column 这两个坐标值知道是哪个单元格然后决定是用什么 render 或 editor 就可以了。

JTable table;
table.setCellEditor(xxx);
table.setDefaultRenderer(Object.class, yyy);

之后你的 xxx 和 yyy 就应该在下次 xxx.getCellEditor(table, row, column) 和 yyy.getCellRender(table, row, column); 时实现剩下的部分功能来返回期望的 cell editor 和 cell render 组件了。

默认的 table.setDefaultRender(Class, yyy); 是根据数据 class 来决定 render); 你可以在 boolean 类型的格子时把数据先转换成 boolean 类型,而在 String 格子把数据先转换成 String 类型而不是把所有数据都当成 String 或 Boolean,转换后的数据都放在Vector中再创建表格它就会知道显示成什么,但这依然不是根据条件定制的;完整意义上的定制依然是自己实现一个定制的 TableCellEditor 和 TableCellRenderer

你回答说 Cell Editor 是 checkbox 时表格中就会出现勾选框,回答 JTextField 时就是文本输入框。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式