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

解决方案 »

  1.   

    JTable貌似挺难!!!看的眼都花了!
      

  2.   

    有columnmodel 和rowmodel, 你看看这两个
      

  3.   

    谁能把原因大概分析一下?
    to christin_jiang:用什么model关系不大吧?
    to xumiaohua:model是不应该知道特定的view的,也就是说,是否updateUI应该由table自己决定比较好,而且updateUI好像是什么L&F改变的时候刷新请高人支持
      

  4.   

    想要改变底色,在JTable中的prepareRenderer方法中设置底色,在getTableCellRendererComponent反映出来设置的属性
    要是想让他不可以编辑,和Renderer没有关系,在类型CheckBox的单元格所使用的Editor里将CheckBox设置为不可用,setEnable(false);应该就可以了
      

  5.   

    自己写个CellRenderer;
    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;
        }}
      

  6.   

    你可以通过重写TableModel里面的这个方法来实现单元格是否可编辑
    public boolean isCellEditable(int row, int col) {
        if(editableColList.contains(new Integer(col))
           &&editableRowList.contains(new Integer(row))
            return true;
        return false;
    }
      

  7.   

    PS:
    editableColList和editableRowList存储的是可编辑的单元格的对应位置