셀 편집 후 JTable 셀 렌더링 유지
JTable에서 사용자 정의 셀 렌더링 및 편집 기능을 구현하면 사용자 경험을 향상시킬 수 있습니다. 그러나 편집 작업 후에도 원하는 형식이 유지되는지 확인하는 것이 중요합니다.
문제
"가격" 형식을 지정하기 위한 사용자 정의 셀 렌더러를 설정한 후 열에서 사용자는 셀 편집 시 숫자 형식이 손실되는 불일치를 경험했습니다. 이러한 시나리오에서는 편집이 커밋된 후 셀 렌더러의 기본값이 적용되지 않을 수 있습니다.
해결책
셀 편집 후 사용자 정의 렌더링을 유지하려면, 적절한 이벤트 트리거와 클래스를 활용하는 것이 중요합니다. 편집이 완료되면 JTable의 editStopped() 메소드는 getCellEditorValue()를 통해 새 값을 수집합니다. 그런 다음 모델은 setValueAt()로 알림을 받고 이후에 fireTableCellUpdated()를 호출해야 합니다. 이 포괄적인 프로세스는 특별한 형식 요구 사항을 처리하기 위해 확장할 수 있는 렌더러를 호출합니다.
추가 고려 사항
더 복잡한 형식 요구 사항의 경우 인스턴스 활용을 고려하는 것이 좋습니다. 사용자 정의 렌더러를 편집기 구성 요소 자체로 사용합니다. 이를 통해 셀의 모양과 동작을 더 효과적으로 제어할 수 있어 셀 수정 후에도 일관된 서식이 보장됩니다.
예
다음 코드 스니펫은 셀의 모양과 동작을 보여주는 예제 구현을 제공합니다. JTable 셀에서 통화 값의 형식을 숫자로 지정합니다. 사용자 정의 렌더러(CurrencyRenderer)는 통화 형식을 처리하고 사용자 정의 편집기(CurrencyEditor)를 사용하면 사용자가 형식을 유지하면서 값을 편집할 수 있습니다.
import java.awt.Component; import java.awt.event.MouseEvent; import java.text.NumberFormat; import javax.swing.DefaultCellEditor; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableCellRenderer; // Custom cell renderer for currency formatting public class CurrencyRenderer extends DefaultTableCellRenderer { private NumberFormat formatter; public CurrencyRenderer(NumberFormat formatter) { this.formatter = formatter; setHorizontalAlignment(JLabel.RIGHT); } @Override public void setValue(Object value) { setText((value == null) ? "" : formatter.format(value)); } } // Custom cell editor for currency input, maintaining the formatting public class CurrencyEditor extends DefaultCellEditor { private NumberFormat formatter; private JTextField textField; public CurrencyEditor(NumberFormat formatter) { super(new JTextField()); this.formatter = formatter; textField = (JTextField) getComponent(); textField.setHorizontalAlignment(JTextField.RIGHT); textField.setBorder(null); } @Override public Object getCellEditorValue() { try { return new Double(textField.getText()); } catch (NumberFormatException e) { return Double.valueOf(0); } } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { textField.setText((value == null) ? "" : formatter.format((Double) value)); return textField; } }
이러한 기술을 통합함으로써 개발자는 사용자 정의 셀 렌더링을 보장할 수 있습니다. 및 편집 기능은 JTable에서 원활하게 작동하여 일관되고 사용자 친화적인 데이터 조작 경험을 제공합니다.
위 내용은 셀 편집 후 사용자 정의 JTable 셀 렌더링을 어떻게 유지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!