改变行边界颜色会引入一些奇怪的细胞移位

时间:2017-02-17 17:06:56

标签: css javafx colors tableview

我改变了某些表格行的样式,以便进行一些突出显示:

table.setRowFactory(tv -> new TableRow<TableBean>() {

        @Override
        public void updateItem(TableBean item, boolean empty) {

        super.updateItem(item, empty);
        if (item == null) {
            setStyle("");
        } else if (item.getComparisonElement().isMarker()) {
            setStyle("-fx-border-color: red;");
        } else {
            setStyle("");
        }
        }
    });

这有效,但我有一些细胞&#34;转移&#34;作为一种不必要的副作用:

enter image description here

1 个答案:

答案 0 :(得分:0)

我怀疑有一些带边框的行而其他没有乱七八糟的布局。

默认样式表modena.css实现大多数边框效果的方式是实际使用“嵌套背景”。这个想法是绘制一个没有插入的纯色背景颜色,然后用正插图绘制第二个背景颜色。例如。如果你绘制一个零插入的红色背景,然后是默认背景颜色的背景,每边有一个1像素的插图,它将创建一个1像素宽的红色边框的效果。 (有趣的是 - 我没有任何真实的证据 - 这种技术比使用实际的边框设置有更好的性能。)这个用例的优点是添加(实际)边框会将表格行的布局更改为空格被分配到边框,而改变背景颜色对布局没有影响。

所以试试这个:

table.setRowFactory(tv -> new TableRow<TableBean>() {

    @Override
    public void updateItem(TableBean item, boolean empty) {

        super.updateItem(item, empty);
        if (item == null) {
            setStyle("");
        } else if (item.getComparisonElement().isMarker()) {
            setStyle("-fx-background-color: red, -fx-background;"+
                     "-fx-background-insets: 0, 1;");
        } else {
            setStyle("");
        }
    }
});