문제

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 { ........
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top