Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVAFX:Tableview行选择行为_Java_Javafx_Javafx Tableview - Fatal编程技术网

JAVAFX:Tableview行选择行为

JAVAFX:Tableview行选择行为,java,javafx,javafx-tableview,Java,Javafx,Javafx Tableview,我有以下代码来设置表格行的背景色 column.setCellFactory((TableColumn<Model, Integer> p) -> { ComboBoxTableCell cell = new ComboBoxTableCell(FXCollections.observableArrayList(0, 1)) { @Override public void updateItem(O

我有以下代码来设置
表格行的背景色

column.setCellFactory((TableColumn<Model, Integer> p) -> {
           ComboBoxTableCell cell = new ComboBoxTableCell(FXCollections.observableArrayList(0, 1)) {
               @Override
               public void updateItem(Object item, boolean empty) {
                   super.updateItem(item, empty);
                   if (!empty && item != null) {
                       if(Integer.valueOf(item.toString()) == 1){
                           getTableRow().setStyle("-fx-background-color: khaki;");
                       }else if(Integer.valueOf(item.toString()) == 0){
                           getTableRow().setStyle(null);
                       }
                   }
               }
           };
           return cell;
        });
column.setCellFactory((表p列)->{
ComboBoxTableCell=新的ComboBoxTableCell(FXCollections.observableArrayList(0,1)){
@凌驾
public void updateItem(对象项,布尔值为空){
super.updateItem(项,空);
如果(!empty&&item!=null){
if(Integer.valueOf(item.toString())==1){
getTableRow().setStyle(“-fx背景色:卡其色;”);
}else if(Integer.valueOf(item.toString())==0){
getTableRow().setStyle(null);
}
}
}
};
返回单元;
});
问题是当我选择背景设置为某种颜色的行时,默认的蓝色表示选择落后。(如下图所示)


如何保留默认选择颜色?

内联样式的优先级高于CSS样式表。因此,选定行的背景也被覆盖。构建背景的方式要求您使用指定
-fx控件内部背景alt
-fx控件内部背景

[...].setStyle("-fx-control-inner-background: khaki; -fx-control-inner-background-alt: khaki;")
然而,还有一个更糟糕的问题:

您可以从
TableCell
s设置样式。由于
TableView
负责将项目分配给单元格,因此,如果在不同的列中使用单元格类型,则此操作的顺序是一个实现细节,会导致任意结果。即使只在一列中使用这些单元格,也无法处理单元格变为空的情况,因此即使是空单元格也可能包含新颜色

行样式属于表行。

如果使用
伪类
和CSS样式表,也可以获得最大的灵活性

例如

此外,您应该使用类型参数来避免将项目从
Integer
转换为
String
,然后再转换回
Integer
(如果需要这样做,应该用强制转换来替换。在这种情况下,最好不要使用原始类型)

final observeList value=FXCollections.observearraylist(0,1);
column.setCellFactory((表p列)->{
ComboBoxTableCell单元格=新ComboxTableCell(值){
@凌驾
受保护的void updateItem(整数项,布尔值为空){
...
}
};
返回单元;
});

内联样式的优先级高于CSS样式表。因此,选定行的背景也被覆盖。构建背景的方式要求您使用指定
-fx控件内部背景alt
-fx控件内部背景

[...].setStyle("-fx-control-inner-background: khaki; -fx-control-inner-background-alt: khaki;")
然而,还有一个更糟糕的问题:

您可以从
TableCell
s设置样式。由于
TableView
负责将项目分配给单元格,因此,如果在不同的列中使用单元格类型,则此操作的顺序是一个实现细节,会导致任意结果。即使只在一列中使用这些单元格,也无法处理单元格变为空的情况,因此即使是空单元格也可能包含新颜色

行样式属于表行。

如果使用
伪类
和CSS样式表,也可以获得最大的灵活性

例如

此外,您应该使用类型参数来避免将项目从
Integer
转换为
String
,然后再转换回
Integer
(如果需要这样做,应该用强制转换来替换。在这种情况下,最好不要使用原始类型)

final observeList value=FXCollections.observearraylist(0,1);
column.setCellFactory((表p列)->{
ComboBoxTableCell单元格=新ComboxTableCell(值){
@凌驾
受保护的void updateItem(整数项,布尔值为空){
...
}
};
返回单元;
});
final ObservableList<Integer> values = FXCollections.observableArrayList(0, 1);

column.setCellFactory((TableColumn<Model, Integer> p) -> {
    ComboBoxTableCell<Model, Integer> cell = new ComboBoxTableCell<Model, Integer>(values) {
        @Override
        protected void updateItem(Integer item, boolean empty) {
            ...
        }
    };
    return cell;
});