我给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(),那么光标就也出了编辑区,但是如果用户本意只是想换行,也造成了不便。
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(),那么光标就也出了编辑区,但是如果用户本意只是想换行,也造成了不便。
但是如果定义了鼠标移动或者点击就运行fireEditingStopped()保存结果,那么光标将出了编辑区,如果这时候没有编辑完,就给编辑者造成了不方便,
如果定义了按下ENTER键运行fireEditingStopped(),那么光标就也出了编辑区,但是如果用户本意只是想换行,也造成了不便。
比如在格子里Enter就是换行,按Ctrl+Enter结束编辑。编辑丢失的问题,重写下下面的方法,试下可行么。
public boolean stopCellEditing() {
return editor.stopCellEditing();
}
public void cancelCellEditing() {
editor.cancelCellEditing();
}
呵呵.
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() ;
}
}
看看这样可不可以啊.老兄.可以的话,记住给我加分啊.
不原 public Object getCellEditorValue() {
if(textarea != null)
return textarea.getText() ;
else
return "";
}
取不到数值