如何为TableView JavaFX中的某些行设置粗体true

时间:2017-05-19 13:52:57

标签: javafx

我有TableView<TypeReport> tv和列

tc_name.setCellValueFactory(new PropertyValueFactory<>("name"));

如果tc_name的单元格中的日期不以" "开头,我希望行为粗体。

我用:

tv.setRowFactory(new Callback<TableView<TypeReport>, TableRow<TypeReport>>() {
    @Override
    public TableRow<TypeReport> call(TableView<TypeReport> param) {
        return new TableRow<TypeReport>() {
            @Override
            protected void updateItem(TypeReport item, boolean empty) {
                if (item==null) {
                    setStyle("");
                } else  {
                    String res=item.getName();
                    if (res.startsWith(" ")){}
                    else
                        setStyle("-fx-font-weight: bold");
                }
            }
        };
    }
});

当我打开应用程序时,所需的行是粗体,但是当我滚动时,一些不同的行是粗体。

1 个答案:

答案 0 :(得分:2)

您需要删除项目名称以" "开头的行的样式。 (注意,您还需要致电super.updateItem(...)):

@Override
protected void updateItem(TypeReport item, boolean empty) {
    super.updateItem(item, empty);
    if (item==null) {
        setStyle("");
    } else  {
        String res=item.getName();
        if (res.startsWith(" ")) {
            setStyle("");
        } else
            setStyle("-fx-font-weight: bold");
    }

}

或等效(但代码较少):

@Override
protected void updateItem(TypeReport item, boolean empty) {
    super.updateItem(item, empty);
    if (item==null || item.getName().startsWith(" ")) {
        setStyle("");
    } else  {
        setStyle("-fx-font-weight: bold");
    }

}