如何在运行中更改TableView的行高?

时间:2014-02-21 22:52:33

标签: javafx javafx-8

当用户选择/取消选择CheckBox时,我想更改JavaFX TableView的行高。我能找到的唯一方法是通过CSS,所以我尝试了:

if (someCheckBox.isSelected())
    tableView.setStyle(".table-row-cell {-fx-cell-size: 60px;}");
else
    tableView.setStyle(".table-row-cell {-fx-cell-size: 20px;}");

但这不起作用。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:4)

我发现JavaFX 8引入了 setFixedCellSize 属性,这符合我的要求,因为我需要所有行具有相同的高度。所以这就是解决方案:

if (someCheckBox.isSelected())
    tableView.setFixedCellSize(60.0);
else
    tableView.setFixedCellSize(20.0);

答案 1 :(得分:1)

这是我对这个问题的解决方案(它只是第一个“解决方法”,但“工作正常”):

column8.setCellFactory(column -> {
        return new TableCell<Anfrage, Set<Email>>() /*Or whathever you have*/ {
            @Override
            protected void updateItem(Set<Email> item, boolean empty) {                    
                super.updateItem(item, empty);
                if (item == null || empty) {
                    setGraphic(null);
                    setText("");
                } else {                           
                    VBox graphic = new VBox();
                    if (item.size()>1) {
                        List<Email> sortedMailsList = new ArrayList<>();
                        sortedMailsList.addAll(item);
                        Collections.sort(sortedMailsList, new Comparator<Email>(){
                            @Override
                            public int compare(Email o1, Email o2) {
                                if (o1.getEmailVersandt() != null) {
                                    if (o2.getEmailVersandt() != null) {
                                        return o1.getEmailVersandt().compareTo(o2.getEmailVersandt());
                                    } else {
                                        return 1;
                                    }
                                } else {
                                    if (o2.getEmailVersandt() != null) {
                                        return -1;
                                    } else {
                                        return 0;
                                    }
                                }                                    
                            }                                
                        });
                        sortedMailsList.stream().forEach((emailObj) -> {
                            graphic.getChildren().add((new Label(emailObj.toString())));
                        });
                    } else {
                        for (Email emailObj : item) {
                            graphic.getChildren().add((new Label(emailObj.toString())));
                        }
                    }                        
                    this.setMaxHeight(20.0*item.size());
                    setGraphic(graphic);                         
                }
            }                                
        };                       
    });

对我而言,它也是“邮件”(可以为空的日期字段),但我认为你不需要它。 要点是: 1.设置单元工厂 2.在“updateItem”中设置高度。 就是这样:))

enter image description here