如何在tableview中显示String而不是整数(FXML)

时间:2017-05-06 15:54:23

标签: javafx combobox tableview fxml

我的数据库表中有一个存储整数的字段。为了使程序更加用户友好,我想在TableViews和ComboBoxes中将数据表示为字符串而不是整数。例如,它应该显示"不支持"而不是1,它应该显示"支持"。这是我的一个领域:

private final SimpleIntegerProperty status = new ReadOnlyIntegerWrapper();
 public int getStatus() {
    return status.get();
}
public void setStatus(int val)
{
    status.set(val);
}

我使用FXML成功检索并向TableView注入数据,但显示0或1;我如何在Java中实现它?

我需要一个ComboBoxes的解决方案,这样用户就可以选择一个有意义的字符串而不是一个数字。

1 个答案:

答案 0 :(得分:1)

创建StringConverter,可以将每个状态转换为您想要的表达式。

public class StatusStringConverter extends StringConverter<Integer> {

    // Manage selectable options as Integer here
    final public static ObservableList<Integer> OPTIONS = FXCollections.observableArrayList(0, 1);

    @Override
    public String toString(Integer value) {
        switch (value) {
            case 0: return "unsupported";
            case 1: return "supported";
            default: return "-";
        }
    }
    @Override
    public Integer fromString(String string) {
        return null;
    }
}

使用ComboBoxTableCell启用StatusStringConverter启用以在单元格和ComboBox选项中显示您的表达式。尝试一下。

table.setEditable(true);
column.setEditable(true);
column.setCellValueFactory(new PropertyValueFactory<>("status"));
column.setCellFactory(ComboBoxTableCell.forTableColumn(
        new StatusStringConverter(), StatusStringConverter.OPTIONS));