丸みを帯びたように表示するだけではなく、丸みのある値をテーブルに保存する方法
-
26-12-2019 - |
質問
私は4小数点以下4桁まで丸められる数字が必要な表を持っています。私はそれを実行することを管理しましたが、この問題は丸められた値を表示している間に、保存されている実際の値は丸みを帯びた値ではありません(私はセルの丸め動作を制御することができるので、BigDecimalを使います)。テーブルに表示されている値が丸みを帯びた値であっても、セル値を印刷すると、4の10進数値を超える数字が得られます。私は自分の編集者とレンダラーを次のように書きました:
class DoubleEditor4 extends DefaultCellEditor {
public DoubleEditor4() {
super(new JFormattedTextField());
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JFormattedTextField editor = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
if (value!=null){
String num = (String) value;
BigDecimal num2 = new BigDecimal(num).setScale(4, BigDecimal.ROUND_HALF_UP);
String text = num2.toString();
editor.setHorizontalAlignment(SwingConstants.RIGHT);
editor.setText(text);
}
return editor;
}
}
class DoubleRenderer4 extends DefaultTableCellRenderer {
public DoubleRenderer4() {
super();
this.setHorizontalAlignment(SwingConstants.RIGHT);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
value = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column );
}
public void setValue(Object value) {
BigDecimal num2 = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
String text = num2.toString();
setText(text);
}
}
.
テーブルモデルの保存されている値が丸みを帯びた値ではないように、私は何をしていますか?ありがとう。
解決
セルエディタクラスのGetCelleditorValue()メソッドを上書きすることで問題を解決できます。
@Override
public Object getCellEditorValue() {
Object v = super.getCellEditorValue();
BigDecimal n = new BigDecimal(v.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
return n.toString();
}
. 所属していません StackOverflow