셀 편집 후 JTable 셀 렌더링 유지
JTable 셀의 사용자 정의 렌더링 형식(예: 통화 형식)이 다음과 같은 상황에 직면할 수 있습니다. 셀 편집 후 손실되었습니다. 이 문제는 기본적으로 편집 프로세스가 사용자 정의 렌더러를 우회하고 테이블 모델을 직접 업데이트하기 때문에 발생합니다.
해결책
이 문제를 해결하려면 테이블의 setValueAt를 확장하면 됩니다. () 메서드를 사용하여 사용자 정의 렌더러가 업데이트된 셀 값에 적용되도록 합니다. 예는 다음과 같습니다.
table.setValueAt(newValue, rowIndex, columnIndex); ((TableModel) table.getModel()).fireTableCellUpdated(rowIndex, columnIndex);
또는 사용자 정의 렌더러를 편집기 구성 요소로 활용하는 사용자 정의 CellEditor를 만들 수 있습니다. 이렇게 하면 편집기는 편집 중에 값에 사용자 지정 서식을 적용할 수 있고, 편집이 완료된 후 렌더러에서는 서식이 지정된 값을 표시할 수 있습니다.
예
다음 코드는 통화Renderer를 사용하는 사용자 정의 통화 편집기를 보여줍니다.
public class CurrencyEditor extends DefaultCellEditor { private JTextField textField; public CurrencyEditor() { super(new JTextField()); textField = (JTextField) this.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) ? "" : CurrencyRenderer.format(value)); return textField; } }
public class CurrencyRenderer extends DefaultTableCellRenderer { private static DecimalFormat formatter = new DecimalFormat("$###,##0.00"); public CurrencyRenderer() { this.setHorizontalAlignment(JLabel.RIGHT); } @Override public void setValue(Object value) { setText((value == null) ? "" : formatter.format(value)); } public static String format(Object value) { return formatter.format(value); } }
제공된 예제를 통해 JTable에서 셀 편집 후 사용자 정의 셀 렌더링을 유지할 수 있습니다.
위 내용은 편집 후 사용자 정의 JTable 셀 렌더링을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!