java endo_表格视图:滚动到表格底部/顶部时得到通知

如果你使用Java 10 +你可以子类

TableViewSkin

并访问

VirtualFlow

. 后一类有

position

属性,可用于确定是否已到达顶部或底部。

下面是使用自定义事件的示例:

MyEndo.java

import javafx.event.Event;

import javafx.event.EventType;

public class MyEvent extends Event {

public static final EventType ANY = new EventType<>(Event.ANY, "MY_EVENT");

public static final EventType TOP_REACHED = new EventType<>(ANY, "TOP_REACHED");

public static final EventType BOTTOM_REACHED = new EventType<>(ANY, "BOTTOM_REACHED");

public MyEvent(EventType extends MyEvent> eventType) {

super(eventType);

}

}

myTableViewSkin.java

import javafx.scene.control.TableView;

import javafx.scene.control.skin.TableViewSkin;

public class MyTableViewSkin extends TableViewSkin {

public MyTableViewSkin(TableView control) {

super(control);

getVirtualFlow().positionProperty().addListener((obs, oldVal, newVal) -> {

if (newVal.doubleValue() == 0.0) {

control.fireEvent(new MyEvent(MyEvent.TOP_REACHED));

} else if (newVal.doubleValue() == 1.0) {

control.fireEvent(new MyEvent(MyEvent.BOTTOM_REACHED));

}

});

}

}

App.java

import javafx.application.Application;

import javafx.beans.property.SimpleIntegerProperty;

import javafx.scene.Scene;

import javafx.scene.control.TableColumn;

import javafx.scene.control.TableView;

import javafx.stage.Stage;

public class App extends Application {

@Override

public void start(Stage primaryStage) {

var table = new TableView();

for (int i = 0; i < 250; i++) {

table.getItems().add(i);

}

var column = new TableColumn("Value");

column.setCellValueFactory(features -> new SimpleIntegerProperty(features.getValue()));

table.getColumns().add(column);

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

table.setSkin(new MyTableViewSkin<>(table));

table.addEventHandler(MyEvent.ANY, event -> System.out.printf("%s%n", event.getEventType()));

primaryStage.setScene(new Scene(table, 500, 300));

primaryStage.setTitle("Example");

primaryStage.show();

}

}

在这个例子中,我手动调用

table.setSkin

. 另一种选择是子类

TableView

超驰

createDefaultSkin

它返回您想要使用的皮肤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值