JavaFX Tableview限制点后的位数
我有一个基于tableview的表,它由两个值填充,我接收到TroughtAPI,我只想在点后显示3位数字。使用JavaFX Tableview限制点后的位数,java,javafx,tableview,Java,Javafx,Tableview,我有一个基于tableview的表,它由两个值填充,我接收到TroughtAPI,我只想在点后显示3位数字。使用StringConverter获取所需格式,并使用TextFieldTableCell安装它,如下所示: threeDigitColumn.setCellFactory(TextFieldTableCell.<RowModel, Double>forTableColumn(new StringConverter<Double>() { p
StringConverter
获取所需格式,并使用TextFieldTableCell
安装它,如下所示:
threeDigitColumn.setCellFactory(TextFieldTableCell.<RowModel, Double>forTableColumn(new StringConverter<Double>() {
private final NumberFormat nf = NumberFormat.getNumberInstance();
{
nf.setMaximumFractionDigits(3);
nf.setMinimumFractionDigits(3);
}
@Override public String toString(final Double value) {
return nf.format(value);
}
@Override public Double fromString(final String s) {
// Don't need this, unless table is editable, see DoubleStringConverter if needed
return null;
}
}));
threeDigitColumn.setCellFactory(TextFieldTableCell.forTableColumn(新的StringConverter()){
private final NumberFormat nf=NumberFormat.getNumberInstance();
{
nf.setMaximumFractionDigits(3);
nf.setMinimumFractionDigits(3);
}
@重写公共字符串到字符串(最终双精度值){
返回nf.format(值);
}
@重写公共双精度fromString(最终字符串s){
//不需要这个,除非表格是可编辑的,如果需要,请参阅DoubleStringConverter
返回null;
}
}));
在表列上使用自定义单元格工厂:
Callback<TableColumn<S, Double>, TableCell<S, Double>> cellFactory = new Callback<TableColumn<S, Double>, TableCell<S, Double>() {
@Override
public TableCell<S, Double> call(TableColumn<S, Double> col) {
return new TableCell<S, Double>() {
@Override
public void updateItem(Double value, boolean empty) {
super.updateItem(value, empty) ;
if (value==null) {
setText(null);
} else {
setText(String.format("%.3f", value.doubleValue()));
}
}
};
}
}
tableCol.setCellFactory(cellFactory);
Callback cellFactory=new Callback这是我过去常做的事。找到
StringConverter
后,我发现它更干净,更易于重用。但对于OP的问题,我认为它同样有效。:-)但是只有在使用类似于TextFieldTableCell
的东西时,才可以使用StringConverter
,如果不使列可编辑(在这种情况下,您可能需要自定义TextField
,以防止非数字输入),它看起来不必要地沉重,除非您实际编辑单元格,否则不会实例化任何TextField
。另外,StringConverter
可以在ComboBox
,ListView
等中重用。如果您可以像ComboBox一样,直接向列表和表提供StringConverter
,则会更容易……不过,ComboBox可以工作。但需要一些调整。TextFieldTableCell.forTableColumn不需要类型。它应该是Numberformat df=DecimalFormat.getNumberInstance()@user3224416:对不起,我可能在复制/粘贴过程中出错了。。。固定的。您也可以使用@James_D的String.format()
version。关于类型的需要,我认为这取决于Java版本。如果省略,我的IDE会抱怨。;-)@haraldK能否请您解释一下在表格可编辑时如何使用此选项?也许我用错误的关键字搜索,但我无法找到关于DoubleStringconverter的信息。如何将其与NumberFormat结合使用?Is返回Double.valueOf(s)代码>fromString函数中的代码是否足够?首先,它是标准JavaFXAPI的一部分。如果要编辑表,最好扩展它。OP的问题是如何只显示3位数字。要在可编辑表中使用上述类,可以使用Double.valueOf
或nf.parse.doubleValue()。