JTable 열을 String으로 설정하고 Double로 정렬한 후 사용자 정의 셀 렌더러는 처음에 열 형식을 $###,##0.00으로 지정하여 값이 변경된 후 셀 렌더링을 중지합니다. 편집되었습니다.
셀을 편집하면 다음 이벤트가 순차적으로 발생합니다.
편집 후 셀 렌더링을 유지하려면 다음 단계를 따르세요. 필요:
다음은 기본 편집기 및 렌더러 구현을 사용하는 기본 예입니다.
import javax.swing.DefaultCellEditor; import javax.swing.DefaultTableCellRenderer; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import java.text.NumberFormat; public class RenderEditNumber { public static void main(String[] args) { NumberFormat nf = NumberFormat.getCurrencyInstance(); DefaultTableModel model = new DefaultTableModel( new String[]{"Amount"}, 0) { @Override public Class<?> getColumnClass(int columnIndex) { return Double.class; } }; for (int i = 0; i < 16; i++) { model.addRow(new Object[]{Double.valueOf(i)}); } JTable table = new JTable(model); table.setPreferredScrollableViewportSize(new Dimension(123, 123)); table.setDefaultRenderer(Double.class, new CurrencyRenderer(nf)); table.setDefaultEditor(Double.class, new CurrencyEditor(nf)); } private static class CurrencyRenderer extends DefaultTableCellRenderer { private NumberFormat formatter; public CurrencyRenderer(NumberFormat formatter) { this.formatter = formatter; this.setHorizontalAlignment(JLabel.RIGHT); } @Override public void setValue(Object value) { setText((value == null) ? "" : formatter.format(value)); } } private static class CurrencyEditor extends DefaultCellEditor { private NumberFormat formatter; private JTextField textField; public CurrencyEditor(NumberFormat formatter) { super(new JTextField()); this.formatter = formatter; this.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) ? "" : formatter.format((Double) value)); return textField; } } }
이 예에서 통화Renderer 및CurrencyEditor 클래스는 각각 기본 렌더러 및 편집기 구현을 확장하여 숫자 서식을 처리합니다. 이 예제에는 JTable에 의해 내부적으로 처리되는 fireTableCellUpdated() 호출이 포함되어 있지 않습니다.
위 내용은 셀 편집 후 JTable 셀 렌더링을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!