滾動條的位置,我已經寫了這個小示例應用程序:JavaFX的 - 如何識別一個TableView中
package application;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
public class Person {
private StringProperty firstName = new SimpleStringProperty();
private StringProperty lastName = new SimpleStringProperty();
public Person(String firstName, String lastName) {
this.firstName.set(firstName);
this.lastName.set(lastName);
}
public String getFirstName() {
return firstName.get();
}
public String getLastName() {
return lastName.get();
}
public StringProperty firstNameProperty() {
return firstName;
}
public StringProperty lastNameProperty() {
return lastName;
}
}
@Override
public void start(Stage primaryStage) {
try {
StackPane root = new StackPane();
TableView<Person> tv = new TableView<>();
TableColumn<Person, String> col = new TableColumn<Person, String>("FirstName");
col.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName"));
tv.getColumns().add(col);
tv.setEditable(true);
col = new TableColumn<Person, String>("LastName");
col.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName"));
col.setCellFactory(TextFieldTableCell.forTableColumn());
col.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Person, String>>() {
@Override
public void handle(CellEditEvent<Person, String> event) {
System.out.println(tv.getItems().get(1).getLastName());
}
});
tv.getColumns().add(col);
for (int i = 0; i < 30; i++) {
tv.getItems().add(new Person("Test" + i, "Test" + i));
}
root.getChildren().add(tv);
Scene scene = new Scene(root, 400, 200);
primaryStage.setScene(scene);
primaryStage.show();
tv.addEventFilter(MouseEvent.MOUSE_RELEASED, event -> {
// ...
});
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
我希望在ScrollBar
已經觸底執行操作。然後我想從數據庫重新加載更多的數據。但是隻有當用戶看到所有已經加載的數據(=底部的滾動條)時才如此。你有很好的建議來解決這個問題嗎?
我的第一個想法是趕上MOUSE_RELEASED
事件(當用戶拖動工具欄)中TableView
,然後來檢查的ScrollBar
位置: - getValue()得到吧 的位置 - getMax()最大值( =底部)。
但我找不到一個方法(不使用通過this method的css選擇器)從給定的TableView
得到ScrollBar
。所以我不能檢查它在某個TableView
中的位置。
你有什麼想法嗎?
我很興奮。謝謝你的幫助。
也許這會工作:[onScrollToColumn](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TableView.html#onScrollToColumnProperty) –
對不起,脫離主題(意思是:請,只有ack如果你願意的話),你是否在你的單元格中獲得了複製效果,編輯一個單元格導致該行中的所有其他單元格都取得該值?在某些地方,我的設置和你基本相同,並且遇到了這個奇怪的問題。 –