Selepas menyediakan lajur JTable sebagai String dan mengisihnya sebagai Double, adat pemapar sel pada mulanya memformat lajur sebagai $###,##0.00 berhenti memaparkan sel selepas nilai disunting.
Apabila sel diedit, peristiwa berikut berlaku dalam urutan:
Untuk mengekalkan pemaparan sel selepas pengeditan, langkah berikut ialah perlu:
Berikut ialah contoh asas menggunakan editor lalai dan pelaksanaan pemapar:
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; } } }
Dalam contoh ini, kelas CurrencyRenderer dan CurrencyEditor melanjutkan pelaksanaan pemapar lalai dan editor, masing-masing, untuk mengendalikan pemformatan Nombor. Ambil perhatian bahawa contoh ini tidak termasuk panggilan fireTableCellUpdated() kerana ia dikendalikan secara dalaman oleh JTable.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Rendering Sel JTable Selepas Suntingan Sel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!