如何使用条件更改tableView行颜色?

时间:2019-06-10 14:02:55

标签: java javafx tableview

我正在使用javafx,并且编写了一个绘制表视图的程序,列是名为Deck的类的字段。

其中一列显示Deck类的“ isValid”字段,该字段始终等于“ Valid”或“ inValid”。

我的目的是,如果“ isValid”字段等于“有效”,则行颜色变为绿色,如果等于“ InValid”,则该牌组的行颜色变为红色。

我为此表设置了一个.css文件,但我不知道如何更改此文件以达到我的目的,或者是否有其他解决方案可以在主代码中进行设置。

这是我的主要代码:

     private void makeTable(){
     TableView tableView = new TableView();

    TableColumn<Deck,String> column1 = new TableColumn<>("DeckName");
    column1.setCellValueFactory(new PropertyValueFactory<>("name"));
    column1.setMinWidth(150);

    TableColumn<Deck,String> column2 = new TableColumn<>("Validate");
    column2.setCellValueFactory(new PropertyValueFactory<>("isValid"));
    column2.setMinWidth(150);

    tableView.getColumns().add(column1);
    tableView.getColumns().add(column2);

    tableView.setItems(getAllDecks());

    // Create a new RowFactory to handle actions
    tableView.setRowFactory(tv -> {

        // Define our new TableRow
        TableRow<Deck> row = new TableRow<>();
        row.setOnMouseClicked(event -> {
            DeckOperator.display(row.getItem().getName());
        });
        return row;
    });

    VBox vbox = new VBox(tableView);
    Stage window = new Stage();
    window.setTitle("AllDecks");
    window.setScene(new Scene(vbox, 300, 300));
window.getScene().getStylesheets().add(getClass().getResource("Table.css").toExternalForm());
    window.show();

}
/**
 * @return all decks of logged in user
 */
private ObservableList<Deck> getAllDecks() {
    for (int i = 0; i <Account.getLoginUser().getCollection().getDecks().size() ; i++) {
        Account.getLoginUser().getCollection().getDecks().get(i).setIsValid();
    }
    return FXCollections.observableArrayList(Account.getLoginUser().getCollection().getDecks());

}

0 个答案:

没有答案