问题描述:
JTable有一列是Boolean类型,使用一个继承自JCheckBox的子类作为Renderer。选中其中一个单元格,然后点击某个按钮,希望出现的结果是被选中的无变化,未选中的成为不可编辑状态并改变底色。
问题是,我已经在model中调用了fireTableChanged方法通知所有的行发生了变化,但是表格并没有立即刷新。貌似只有选中的那行刷新了(因为我看发现Renderer的getTableCellRendererComponent方法被调用了),其他的行在选中/去选或者切换到其他窗口,然后再切换回来才会刷新。请问如何处理,谢谢!
JTable有一列是Boolean类型,使用一个继承自JCheckBox的子类作为Renderer。选中其中一个单元格,然后点击某个按钮,希望出现的结果是被选中的无变化,未选中的成为不可编辑状态并改变底色。
问题是,我已经在model中调用了fireTableChanged方法通知所有的行发生了变化,但是表格并没有立即刷新。貌似只有选中的那行刷新了(因为我看发现Renderer的getTableCellRendererComponent方法被调用了),其他的行在选中/去选或者切换到其他窗口,然后再切换回来才会刷新。请问如何处理,谢谢!
解决方案 »
- repaint()不调用paintComponent()
- 随机数
- java的每个方法最外层都要加上 try catch吗。
- java的一些特殊标示符
- JList中加入JCheckBox控件时多选问题请教
- 试用Socket写QQ程序,但出现阻塞问题,希望高手指教。
- 各位大侠们,给我一个提示吧!!!在线等
- 一个简单,而有头痛的问题。怎样把字符串转换成Color类型。解决给高分!!!!!!
- 在windows下开发的java应用程序移到sun solaris环境下时,应该考虑.....?
- 哪里有jbuilder4.0可供下载?
- java从数据库读取出数据按一定格式写到TXT文件中,大虾指教指教
- 高手请指教!
to christin_jiang:用什么model关系不大吧?
to xumiaohua:model是不应该知道特定的view的,也就是说,是否updateUI应该由table自己决定比较好,而且updateUI好像是什么L&F改变的时候刷新请高人支持
要是想让他不可以编辑,和Renderer没有关系,在类型CheckBox的单元格所使用的Editor里将CheckBox设置为不可用,setEnable(false);应该就可以了
public class CustomTreeCellRenderer extends DefaultTreeCellRenderer { public CustomTreeCellRenderer() {
super();
} public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel,
boolean expanded,
boolean leaf, int row,
boolean hasFocus) {
String stringValue = tree.convertValueToText(value, sel,
expanded, leaf, row, hasFocus); //在这里去写你要的效果
return this;
}}
public boolean isCellEditable(int row, int col) {
if(editableColList.contains(new Integer(col))
&&editableRowList.contains(new Integer(row))
return true;
return false;
}
editableColList和editableRowList存储的是可编辑的单元格的对应位置