セル編集後の JTable セル レンダリングの維持
JTable セルのカスタム レンダリング形式 (通貨形式など) が変更される状況が発生する場合があります。セル編集後に失われます。この問題は、デフォルトでは編集プロセスがカスタム レンダラをバイパスしてテーブル モデルを直接更新するために発生します。
解決策
これを解決するには、テーブルの setValueAt を拡張します。 () メソッドを使用して、カスタム レンダラーが更新されたセル値に確実に適用されるようにします。以下に例を示します。
table.setValueAt(newValue, rowIndex, columnIndex); ((TableModel) table.getModel()).fireTableCellUpdated(rowIndex, columnIndex);
あるいは、カスタム レンダラーをエディター コンポーネントとして利用するカスタム CellEditor を作成することもできます。これにより、エディターは編集中にカスタム書式設定を値に適用でき、レンダラーは編集完了後に書式設定された値を表示できます。
例
次のコードは、CurrencyRenderer を使用するカスタム CurrencyEditor を示しています。
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); } }
By提供された例を使用すると、JTable でセルを編集した後もカスタム セルのレンダリングを維持できます。
以上が編集後にカスタム JTable セルのレンダリングを保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。