ホームページ >Java >&#&チュートリアル >セル編集後に JTable セルのレンダリングを維持するにはどうすればよいですか?
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; } } }
この例では、CurrencyRenderer クラスと CurrencyEditor クラスはそれぞれ、デフォルトのレンダラーとエディターの実装を次のように拡張します。数値の書式設定をハンドルします。この例には、JTable によって内部的に処理される fireTableCellUpdated() 呼び出しが含まれていないことに注意してください。
以上がセル編集後に JTable セルのレンダリングを維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。