- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 TableView 组件的 onScroll 事件监听器:
FXML:
<TableView fx:id="table" onScroll="#doSomething" tableMenuButtonVisible="true" VBox.vgrow="ALWAYS">
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
Java Controller :
@FXML
void doSomething(ActionEvent event)
{
System.out.println("Object: " + event.getSource());
}
但是它不起作用!我做错了什么?
我需要捕获垂直滚动条来手动控制滚动位置并根据向下或向上滚动来获取相关数据。
谢谢大家!
最佳答案
我认为可能发生的情况是 TableView 本身正在消耗滚动事件并在内部处理它,因此它永远不会到达您的应用程序处理程序。
最初,我认为您可能想使用 onScrollTo
而不是onScroll
,但这似乎并没有真正解决问题。
我认为有效的解决方案是在滚动事件上应用过滤器。
此外,您可以编写使用 scrollTo
的代码调用“手动控制滚动位置”。
以下是一些您可以尝试的示例代码 (Java 8):
TableScrollerApp.java
package finder;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class TableScrollerApp extends Application {
@Override public void start(final Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("tablescroller.fxml")
);
Parent parent = loader.load();
stage.setScene(new Scene(new Group(parent)));
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
TableScrollerController.java
package finder;
import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.fxml.FXML;
import javafx.scene.control.ScrollToEvent;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.ScrollEvent;
import java.util.Arrays;
import java.util.stream.Collectors;
public class TableScrollerController {
private static final String[] fruitNames = {
"apples", "oranges", "pears", "peaches",
"guavas", "bananas", "jackfruit", "durians"
};
@FXML
private TableView<Fruit> fruitsTable;
@FXML
private TableColumn<Fruit, String> fruitsColumn;
@FXML
protected void initialize() {
fruitsColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
fruitsTable.addEventFilter(ScrollEvent.ANY, event ->
System.out.println("Coded scroll filter: " + event)
);
fruitsTable.getItems().setAll(
Arrays.stream(fruitNames)
.map(Fruit::new)
.collect(Collectors.toList())
);
fruitsTable.scrollTo(5);
}
@FXML
protected void onScrollHandler(ScrollEvent scrollEvent) {
System.out.println("FXML referenced scroll handler: " + scrollEvent);
}
@FXML
protected void onScrollToHandler(ScrollToEvent<Integer> scrollToEvent) {
System.out.println("FXML referenced onScroll handler: " + scrollToEvent);
}
public static class Fruit {
private ReadOnlyStringWrapper name;
public Fruit(String name) {
this.name = new ReadOnlyStringWrapper(name);
}
public String getName() {
return name.get();
}
public ReadOnlyStringProperty nameProperty() {
return name;
}
}
}
tablescroller.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<TableView fx:id="fruitsTable"
maxHeight="-Infinity" maxWidth="-Infinity"
minHeight="-Infinity" minWidth="-Infinity"
onScroll="#onScrollHandler"
onScrollTo="#onScrollToHandler"
prefHeight="100.0" prefWidth="250.0"
xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="finder.TableScrollerController">
<columns>
<TableColumn fx:id="fruitsColumn"
maxWidth="800.0" minWidth="200.0" prefWidth="-1.0"
text="Fruits" />
</columns>
</TableView>
关于java - onScroll 监听器在 JavaFX 2 的 TableView 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789525/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!