jtable에서 셀을 편집 할 때 추가 동작을 제공하십시오
-
20-09-2019 - |
문제
Java에서 앱을 만들고 있습니다. JTable에서 셀을 편집 할 때 추가 동작을 제공해야합니다. 따라서 이상적으로 이것은 편집 후 셀이 초점을 잃을 때 발생합니다. 일부 사후 처리에 따라 셀 값을 재설정 할 수 있습니다. AA 셀 편집기를 사용해 보았지만 원하는 행동을 제공하지 않습니다.
기본 jtable에서 셀을 두 번 클릭 할 때만 편집 가능하게됩니다. 그러나 Celleditor를 구현할 때 셀은 초점을 맞추 자마자 편집 가능하게됩니다.
다음은 My Custom Celleditor의 코드입니다.
public class ParameterDefinitionEditor
extends AbstractCellEditor
implements TableCellEditor{
private JTable table;
private DefaultTableModel defaultTableModel;
public ParameterDefinitionEditor(DefaultTableModel defaultTableModel,
JTable table) {
super();
this.table = table;
this.defaultTableModel = defaultTableModel;
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(0).setCellEditor(this);
}
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column) {
if (isSelected) {
// Do some processing.
}
((JTextField)component).setText((String)value);
// Return the configured component
return component;
}
public Object getCellEditorValue() {
return ((JTextField)component).getText();
}
}
모든 도움이 감사하겠습니다. 감사.
해결책
일부 사후 처리에 따라 셀 값을 재설정 할 수 있습니다.
stopcellediting () 메소드를 재정의하여 원하는 경우 셀 편집기 에서이 작업을 올바르게 수행 할 수 있습니다.
기본 jtable에서 셀을 두 번 클릭 할 때만 편집 가능하게됩니다. 그러나 Celleditor를 구현할 때 셀은 초점을 맞추 자마자 편집 가능하게됩니다.
DefaultCellEditor를 확장합니다. 이것은 setClickCountTostart () 메소드에 의해 제어됩니다.
따라서 이상적으로 이것은 편집 후 셀이 초점을 잃을 때 발생합니다.
나는 당신이 아마도 탁자에 Tablemodellistener를 추가해야한다는 다른 제안에 동의합니다. 요구 사항에 따라 테이블 셀 리스너.
다른 팁
커스텀 셀 편집기를 제공함으로써 귀하의 목적을 제공한다고 생각하지 않습니다.
사용자 작업을 기반으로 처리를 수행하려면 테이블 모델이
청취자 세트 (TableModellistener를 구현하는)와 논리를 넣어야합니다.
"TableChanged"방법에서.
스윙 튜토리얼 에서도이 섹션을 확인하십시오.
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
스톱 셀러 팅을 우선하여 이러한 유형의 행동을 달성했습니다 (AbstractCelleditor의 사용자 정의 구현을 사용합니다).
public boolean stopCellEditing()
{
String s = (String) getCellEditorValue();
if ( ! valueValidator.isValid(s) )
{
editorComponent.setBorder(new LineBorder(Color.red));
Toolkit.getDefaultToolkit().beep();
return false;
}
}
else { ........