关闭

swing关于jtable的putClientProperty("terminateEditOnFocusLost", Boolean.TRUE)的问题

1101人阅读 评论(0) 收藏 举报

    

    在netbeans上做一个swing,但是出现问题,如果我正在jtable上编辑完一个cell的时候,去点击其他的按钮或者控件,那么正在编辑的那个cell的内容是取不到的,比如说我正在编辑第二行第三列的时候,输入500,然后点击其他按钮,此时jtable上面这个cell的背景是黑色的,或者是正在编辑的状态,我是取不到这个500的。

        要想解决这个问题,必须要在jtable构建的时候,加上一句putClientProperty("terminateEditOnFocusLost", Boolean.TRUE),这一句的作用是:当从当前的jtable移到其他地方,也就是其他控件的时候,当前编辑的数据就会固定了,也就是使之不处于编辑状态,从而让其他控件可以访问这些输入。

        但是我在实际开发的时候,发现一个问题:如果其他控件是一个按钮等不是jtable的时候,没有问题,如果是另一个jtable的时候就有问题(也就是我在一个jtable上面输入,然后再双击另一个jtable的cell进行编辑的时候)会出现一个空指针异常

         java.lang.NullPointerException 
      在javax.swing.JTable中的$ CellEditorRemover.propertyChange

         虽然我不知道具体的原因是为什么,但是我琢磨了半天,才发现是putClientProperty("terminateEditOnFocusLost", Boolean.TRUE)的问题,但是这一句又不能删除,所以在代码中加入了这样一句话,完美解决。(在jtable的focusLost事件中)

       

private void jTable2FocusLost(java.awt.event.FocusEvent evt) {                                  
        // TODO add your handling code here:
         CellEditor editor= jTable2.getCellEditor();
        if(jTable2.isEditing()&&editor!=null)
        {
           boolean b= editor.stopCellEditing();
           if(!b)
           {
               editor.cancelCellEditing();
           }
        }
    }             




        

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16720次
    • 积分:236
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:1篇
    • 译文:1篇
    • 评论:0条
    文章存档