我给jtable的一列自定义了一个editor,
class TableCellTextAreaEditor extends AbstractCellEditor implements TableCellEditor{
        /**
         *
         */
        private static final long serialVersionUID = 1L;
        public JScrollPane scrollpane;
        public JTextArea textarea;
        TableCellTextAreaEditor()
        {
            scrollpane=new JScrollPane();
            textarea =new JTextArea();
            textarea.setLineWrap(true);
            textarea.setWrapStyleWord(true);
            scrollpane.setViewportView(textarea);
            textarea.setFont(new Font("Dialog",Font.PLAIN,13));
        }
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            textarea.setText((String)value);
            return scrollpane;
        }        public Object getCellEditorValue() {
            return textarea.getText() ;
        }
    }当我还在编辑中,鼠标点到表头的时候,刚刚编辑好的东西,就立即丢失了。我理解是,当点击表头的时候,在还没有运行fireEditingStopped()之前系统运行了fireEditingCanceled() , 而鼠标点到别的地方也不丢失,怎么样能让点到表头的时候不丢失编辑好的内容阿。 
但是如果定义了鼠标移动或者点击就运行fireEditingStopped()保存结果,那么光标将出了编辑区,如果这时候没有编辑完,就给编辑者造成了不方便,
如果定义了按下ENTER键运行fireEditingStopped(),那么光标就也出了编辑区,但是如果用户本意只是想换行,也造成了不便。

解决方案 »

  1.   

    当我还在编辑中,鼠标点到表头的时候,刚刚编辑好的东西,就立即丢失了。而鼠标点到别的地方也不丢失。我理解是,当点击表头的时候,在还没有运行 fireEditingStopped()之前系统运行了fireEditingCanceled() ,导致编辑的东西丢失,怎么样让点击表头时候,不运行fireEditingCanceled()。
    但是如果定义了鼠标移动或者点击就运行fireEditingStopped()保存结果,那么光标将出了编辑区,如果这时候没有编辑完,就给编辑者造成了不方便,
    如果定义了按下ENTER键运行fireEditingStopped(),那么光标就也出了编辑区,但是如果用户本意只是想换行,也造成了不便。
      

  2.   

    操作上可以规范一下,模仿其他的产品。
    比如在格子里Enter就是换行,按Ctrl+Enter结束编辑。编辑丢失的问题,重写下下面的方法,试下可行么。
    public boolean stopCellEditing() {
    return editor.stopCellEditing();
    }
    public void cancelCellEditing() {
    editor.cancelCellEditing();
    }
      

  3.   

    兄弟门,加油啊.多看看书吧,
    呵呵.
    class TableCellTextAreaEditor extends AbstractCellEditor implements TableCellEditor{ 
            
                      
            TableCellTextAreaEditor() 
            { 
                        } 
            public Component getTableCellEditorComponent(JTable table, Object value, boolean    isSelected, int row, int column) {JScrollPane scrollpane; 
              JTextArea textarea; 
    scrollpane=new JScrollPane(); 
                textarea =new JTextArea(); 
                textarea.setLineWrap(true); 
                textarea.setWrapStyleWord(true); 
                scrollpane.setViewportView(textarea); 
                textarea.setFont(new Font("Dialog",Font.PLAIN,13)); 
                textarea.setText((String)value);      
                return scrollpane; 
            }         public Object getCellEditorValue() { 
                return textarea.getText() ; 
            } 
        } 
    看看这样可不可以啊.老兄.可以的话,记住给我加分啊.
      

  4.   

    不好意思,把 textarea 申明成全局的,
    不原   public Object getCellEditorValue() { 
                if(textarea != null)
                return textarea.getText() ; 
                else
                 return "";
            } 
    取不到数值