【问题标题】:TableView ObservableList change row styleTableView ObservableList 改变行样式
【发布时间】:2018-05-06 03:57:07
【问题描述】:

我需要更改第 6 列中包含字母“N”的行的颜色,我见过很多示例,但没有使用 ObservableList,我需要这样做。

在“FOR”中,我控制表格的大小,在“IF”中,我检查第 6 列中包含字母“N”的所有行是否更改了整个行的颜色。

@FXML private TableView<ObservableList> table;  

        for(int i = 0; i< table.getItems().size(); i++){
                            if(table.getItems().get(i).get(6).toString().equalsIgnoreCase("N")){
                                //table.get.get(i).setStyle("-fx-background-color: yellow"); //NOT FOUND
                            }
        }

【问题讨论】:

  • 你应该避免使用原始类型:你应该有TableView&lt;ObservableList&lt;Something&gt;&gt;,而不是TableView&lt;ObservableList&gt;

标签: javafx tableview javafx-8 javafx-2


【解决方案1】:

在表格上使用行工厂:

public class MyControllerClass {

    @FXML
    private TableView<ObservableList<Object>> table ; // TODO: use a more appropriate type than Object

    public void initialize() {
        table.setRowFactory(tv -> new TableRow<ObservableList<Object>>() {
            @Override
            protected void updateItem(ObservableList<Object> row, boolean empty) {
                super.updateItem(row, empty);
                if (row != null && row.get(6).toString().equalsIgnoreCase("N")) {
                    setStyle("-fx-background-color: yellow;");
                } else {
                    setStyle("");
                }
            }
        });
    }

    // ...
}

【讨论】:

  • 对重载的方法不是很了解,要影响表的方法要放在哪里呢?谢谢!!
  • @Arkhan6 我不明白这个问题。您在控制器的 initialize() 方法中设置行工厂,就像我在发布的答案中所做的那样。
  • 我在initialize()中输入了代码,并且可以正常使用,非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多