问题描述:
JTable有一列是Boolean类型,使用一个继承自JCheckBox的子类作为Renderer。选中其中一个单元格,然后点击某个按钮,希望出现的结果是被选中的无变化,未选中的成为不可编辑状态并改变底色。
问题是,我已经在model中调用了fireTableChanged方法通知所有的行发生了变化,但是表格并没有立即刷新。貌似只有选中的那行刷新了(因为我看发现Renderer的getTableCellRendererComponent方法被调用了),其他的行在选中/去选或者切换到其他窗口,然后再切换回来才会刷新。请问如何处理,谢谢!
JTable有一列是Boolean类型,使用一个继承自JCheckBox的子类作为Renderer。选中其中一个单元格,然后点击某个按钮,希望出现的结果是被选中的无变化,未选中的成为不可编辑状态并改变底色。
问题是,我已经在model中调用了fireTableChanged方法通知所有的行发生了变化,但是表格并没有立即刷新。貌似只有选中的那行刷新了(因为我看发现Renderer的getTableCellRendererComponent方法被调用了),其他的行在选中/去选或者切换到其他窗口,然后再切换回来才会刷新。请问如何处理,谢谢!
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存储的是可编辑的单元格的对应位置