如果我理解正确,您想要:
- 使某一列的所有单元格都具有半透明的背景。
- 当选择这些单元格时,它们应该看起来像默认的
modena.css
所选的外观。
换句话说,用那种深蓝色替换半透明的背景,并使文本变为白色。
您应该为适当的单元格添加样式类,然后可以在CSS文件中使用它。以下是一个小例子:
Main.java
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
import javafx.util.Pair;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
var table = System.getProperties().stringPropertyNames().stream()
.map(name -> new Pair<>(name, System.getProperty(name)))
.collect(collectingAndThen(toCollection(FXCollections::observableArrayList), TableView::new));
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
table.getSelectionModel().setCellSelectionEnabled(true);
var keyCol = new TableColumn<Pair<String, String>, String>("Key");
keyCol.setCellValueFactory(new PropertyValueFactory<>("key"));
table.getColumns().add(keyCol);
var valCol = new TableColumn<Pair<String, String>, String>("Value");
valCol.setCellValueFactory(new PropertyValueFactory<>("value"));
valCol.setCellFactory(tc -> new TableCell<>() {
{ getStyleClass().add("highlighted-table-cell"); }
@Override protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
} else {
setText(item);
}
}
});
table.getColumns().add(valCol);
var scene = new Scene(table, 600, 400);
scene.getStylesheets().add("Main.css");
primaryStage.setScene(scene);
primaryStage.show();
}
}
Main.css
.highlighted-table-cell {
-fx-background-color: rgba(0, 128, 0, 0.3);
}
.highlighted-table-cell:selected {
-fx-background-color: inherit;
}
.table-row-cell:selected > .highlighted-table-cell {
-fx-background-color: inherit;
}
getStyleClass.add("something.css")
而不是setStyle(String)
,因为你不能在代码中进行目标定位(或者至少很麻烦)。 - trilogy