java - CSS 仅应用于奇数行

标签 java css javafx-2

我有一个填充了 Samples 对象的 TableView 。如果 Samples 对象的属性 = true,我想填充 TableRow。我使用了基于 jewelsea 的这个答案的方法:Disable TableRow based on data

int i = 0;
if (tblSamples.getItems().size() > 0) {
    for (Node n : tblSamples.lookupAll("TableRow")) {
        if (n instanceof TableRow) {
            TableRow row = (TableRow) n;
            row.getStyleClass().removeAll("hasMastitisRow");

            if (tblSamples.getItems().get(i).getClinicalMastitis()) {
                row.getStyleClass().add("hasMastitisRow");
            }
            i++;

            if (i == tblSamples.getItems().size()) {
                break;
            }
        }
    }
}

CSS:

.hasMastitisRow {  
    -fx-control-inner-background: linear-gradient(#FFFFFF 85%, red 100%);
}

但是,它只适用于奇数行,偶数行似乎不起作用?

编辑:当 CSS 应用于偶数行时(在奇数行我没有错误),我似乎也遇到了以下错误:

WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-table-cell-border-color' while resolving lookups for '-fx-background-color' from rule '*.table-row-cell:odd' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-control-inner-background' while resolving lookups for '-fx-text-fill' from rule '*.table-cell' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-control-inner-background' while resolving lookups for '-fx-text-fill' from rule '*.table-cell' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-control-inner-background' while resolving lookups for '-fx-text-fill' from rule '*.table-cell' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-control-inner-background' while resolving lookups for '-fx-text-fill' from rule '*.table-row-cell' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-table-cell-border-color' while resolving lookups for '-fx-background-color' from rule '*.table-row-cell:odd' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-control-inner-background' while resolving lookups for '-fx-text-fill' from rule '*.table-cell' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-control-inner-background' while resolving lookups for '-fx-text-fill' from rule '*.table-cell' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss
WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve '-fx-control-inner-background' while resolving lookups for '-fx-text-fill' from rule '*.table-cell' in stylesheet jar:file:/C:/Program%20Files/Java/jdk1.7.0_15/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss

编辑: 新方法但结果相同(应用于奇数行,而不是偶数行):

tc_Samples_Quarter.setCellFactory(new Callback<TableColumn<Samples, String>, TableCell<Samples, String>>() {
        @Override
        public TableCell<Samples, String> call(TableColumn<Samples, String> soCalledSampleRowStringTableColumn) {
            return new TableCell<Samples, String>() {
                @Override
                public void updateItem(final String item, final boolean empty) {
                    super.updateItem(item, empty);
                    this.getTableRow().getStyleClass().remove("hasMastitisRow");
                    if (item != null) {
                        setText(item);
                        this.getTableRow().getStyleClass().add("hasMastitisRow");
                    } else {
                        setText(null);
                    }
                }
            };
        }
    });

最佳答案

对您的一些代码感到好奇。首先,您要像这样获取节点:

for (Node n : tblSamples.lookupAll("TableRow")) {

然后你做一个检查实例看看它是否是一个 TableRow

if (n instanceof TableRow) {

有必要吗? lookupAll 是否有可能返回不是 TableRow 的节点?如果是这样,那么一种可能性是 i 索引的增量仅发生在 if (n instanceof TableRow) 内部,所以 i仅当它是 TableRow 时才递增。 i 是否与索引中的元素不匹配,因为它跟不上循环?

关于java - CSS 仅应用于奇数行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184996/

相关文章:

java - Spring Boot结构体中应用Yml Map<String,Map<String,List<Object>>>

java - 尝试将通知文本提取到 Activity (解析)

css - ul li wide than browser window 强制到新行进行分页

java - JavaFX TextArea 中的 Tab 键导航

JavaFX 双向绑定(bind)不适用于控件变得不可编辑

Java邮件错误: SMTPAddressFailedException: 450 too many connections from your IP (rate controlled)

java - 如何创建可以从不同类访问的全局变量列表?

html - 最小高度的媒体查询

html - 当我更改字体大小时,媒体查询中的 ems 没有响应

java - 确定 JavaFX 更改监听器中的调用节点