javafx - 如何在悬停时将阴影应用到表格行的底部
问题描述
这只会给我一个阴影。
增加 y 偏移量没有任何作用。看起来它可能是“背后的东西”
.table-row-cell:hover {
-fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 10, 0.5, 0.0, 0.0)
}
//increased y axis offset
.table-row-cell:hover {
-fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 10, 0.5, 0.0, 5.0)
}
解决方案
后续行按照添加的顺序放入堆栈。这就是您描述为“背后”的问题的原因。要获得所需的效果,请将悬停的行放在前面以放在堆栈的顶部。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TableRowDropShadowApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
TableView<Employee> tableView = new TableView<>(
FXCollections.observableArrayList(new Employee("John", "Doe"), new Employee("Jane", "Smith")));
TableColumn<Employee, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(param -> param.getValue().nameProperty);
TableColumn<Employee, String> surnameColumn = new TableColumn<>("Surname");
surnameColumn.setCellValueFactory(param -> param.getValue().surnameProperty);
tableView.getColumns().setAll(nameColumn, surnameColumn);
tableView.setRowFactory(table -> {
TableRow<Employee> tableRow = new TableRow<>();
tableRow.hoverProperty().addListener((ChangeListener<Boolean>) (observable, oldValue, newValue) -> {
if (newValue) {
tableRow.toFront();
tableRow.setStyle("-fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 10, 0.5, 0.0, 0.0)");
} else {
tableRow.setStyle("");
}
});
return tableRow;
});
primaryStage.setScene(new Scene(tableView));
primaryStage.show();
}
}
class Employee {
public final StringProperty nameProperty = new SimpleStringProperty();
public final StringProperty surnameProperty = new SimpleStringProperty();
public Employee(String name, String surname) {
nameProperty.set(name);
surnameProperty.set(surname);
}
}
推荐阅读
- reactjs - 检查 If/Else 块奇怪行为中的空数组
- python-3.x - 导入子模块然后从脚本调用函数
- php - Slim (V3) 框架:为生成的链接添加前缀,但不为传入路由添加前缀
- visual-studio - Unity3D 与 Visual Studio 2019 - 自动刷新
- python - 来自 multipart/form-data 原始套接字的 Python 解码文件
- stored-procedures - 环回节点 mssql:如何设置远程方法以使用存储过程的输出参数?
- google-apps-script - Google Ads 脚本:如何获取 30 天的数据,然后每天循环
- javascript - 在小屏幕尺寸上将引导导航栏置于顶部
- c++ - 在代码中使用#if MACROVALUE #endif 有什么意义?
- r - 如何将两个不同 data.table 中的列乘以匹配条件?