- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了这个小示例应用程序:
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
到达底部时执行操作。然后我想从数据库中重新加载更多数据。但只有到那时,当用户看到所有已经加载的数据时(=底部的滚动条)。您对解决这个问题有什么好的建议吗?
我的第一个想法是捕捉 TableView
的 MOUSE_RELEASED
事件(当用户拖动栏时),然后检查 ScrollBar< 的位置
:- getValue()获取栏的位置- getMax()最大值(=底部)。
但我找不到从给定的 TableView
获取 ScrollBar
的方法(不通过 this method 使用 css-selector)。所以我无法检查它在某个 TableView
中的位置。
你有什么想法吗??
我很兴奋。感谢您的帮助。
最佳答案
获取滚动条的唯一方法是通过查找,这有点 hack,但只要您在之后在场景中呈现表格,它就会起作用.你需要
ScrollBar verticalBar = (ScrollBar) table.lookup(".scroll-bar:vertical");
请注意,无需扰乱用户事件:您可以直接观察滚动条的 value
属性:
verticalBar.valueProperty().addListener((obs, oldValue, newValue) -> {
if (newValue.doubleValue() >= verticalBar.getMax()) {
// add more data...
}
});
中南合作:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.ScrollBar;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class AddMoreTableDataOnScrollToBottom extends Application {
@Override
public void start(Stage primaryStage) {
TableView<Item> table = new TableView<>();
table.getColumns().add(column("Item", Item::nameProperty));
table.getColumns().add(column("Value", Item::valueProperty));
addMoreData(table, 20);
Scene scene = new Scene(new BorderPane(table), 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
ScrollBar verticalBar = (ScrollBar) table.lookup(".scroll-bar:vertical");
verticalBar.valueProperty().addListener((obs, oldValue, newValue) -> {
if (newValue.doubleValue() >= verticalBar.getMax()) {
addMoreData(table, 20);
}
});
}
private void addMoreData(TableView<Item> table, int numItems) {
Task<List<Item>> dataRetrieveTask = new Task<List<Item>>() {
@Override
public List<Item> call() throws Exception {
// mimic connect to db:
Thread.sleep(500);
List<Item> items = new ArrayList<>();
int nextItem = table.getItems().size() + 1 ;
for (int i = nextItem; i < nextItem + numItems; i++ ){
items.add(new Item("Item "+i, i));
}
return items ;
}
};
dataRetrieveTask.setOnSucceeded(e -> table.getItems().addAll(dataRetrieveTask.getValue()));
new Thread(dataRetrieveTask).start();
}
private <S,T> TableColumn<S,T> column(String title, Function<S, ObservableValue<T>> prop) {
TableColumn<S,T> col = new TableColumn<>(title);
col.setCellValueFactory(cellData -> prop.apply(cellData.getValue()));
return col ;
}
public static class Item {
private final StringProperty name = new SimpleStringProperty();
private final IntegerProperty value = new SimpleIntegerProperty();
public Item(String name, int value) {
setName(name);
setValue(value);
}
public final StringProperty nameProperty() {
return this.name;
}
public final String getName() {
return this.nameProperty().get();
}
public final void setName(final String name) {
this.nameProperty().set(name);
}
public final IntegerProperty valueProperty() {
return this.value;
}
public final int getValue() {
return this.valueProperty().get();
}
public final void setValue(final int value) {
this.valueProperty().set(value);
}
}
public static void main(String[] args) {
launch(args);
}
}
关于JavaFX - 如何识别 ScrollBar 在 TableView 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400928/
如标题所述,我遇到了两个 using 指令之间引用不明确的问题。 一个是System.Windows.Forms: using System.Windows.Forms; 另一个来自自定义库,Arct
我遇到了 Internet Explorer 中显示滚动条的问题。 我有一个 div,它的内容可以比 div 本身更宽,所以会出现一个水平滚动条。水平滚动条很好,但如果显示水平滚动条,Internet
情况是这样的...... 我正在使用 jQuery/AJAX 将各种 HTML 序列调用到我的主控制面板/网页中。 一些请求返回一个很长的结果,并且需要在弹出框内显示一个滚动条。 当客户关闭最初的长结
我构建了一个控件,为 JavaFX 提供类似 Twitter Bootstrap 导航栏的行为。它基本上由一个 StackPane 和一个背面的 ScrollPane 组成,一个 BorderPane
发现一个奇怪的问题,做了一些谷歌搜索,但没有找到任何有类似问题的人。 简而言之。我在另一个位置固定的 div 中有一个位置固定的 div。在非视网膜上,一切都很好,但在 macbook 视网膜(web
我正在尝试查看 webkit 伪元素的默认 css 值(可能是源代码?),以便我可以创建与默认值非常相似但略有自定义的自定义 webkit 元素。 这些元素是不显示在 DOM 中的影子元素。您可以在
我有以下 CSS 规则: ::-webkit-scrollbar-thumb:vertical:hover { background-color: #666; } 我还想在悬停 webkit-
我的网页有居中的页眉、内容和页脚 div,每个 div 的宽度都是 900 像素。 (关于页眉、内容和页脚,我能提供的唯一其他可能相关的信息是页眉具有固定定位,内容是相对定位的,页脚是绝对定位的。但是
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
我的网站在 Chrome 和 Firefox 中都有一个双滚动条(这两种浏览器都是最新的)。我一直在研究网络和 stackoverflow,并尝试遵循 html 元素上的建议选项: html { 溢出
我想更改滚动条的样式,为此我在 css 下方使用,但我想将它用于页面上的特定 div,而不是整个页面。 我如何使用 div 类或 id 自定义它 ::-webkit-scrollbar { w
我正在使用 jScrollPane,只是因为它是 Google 上的第一件事,而且我很累。所以,我首先要说我不反对使用不同的东西。 我有一个 2 列的部分。右列使用 jScrollPane 插件并具有
我正在尝试向 JList(使用自定义数据模型)添加滚动条。添加 JScrollPane 实际上隐藏了 JList,而不是添加滚动条。当我使用滚动条运行代码时,JList 不可见,也看不到数据。 pla
请引用这里的表格。 http://www.funkkopfhoerer-test.com/vergleichstabelle-funkkopfhoerer/ 我正在使用表插件,并在其顶部创建了一个自定
是否可以在scintilla控件的滚动条中标记搜索结果/断点/书签?就像在 Google Chrome 或 JetBrains IDE 中所做的那样。 最佳答案 是的,这是可能的。 首先您必须知道要标
我正在尝试让 javascript 将页面滚动到目标位置,例如: scrollbarxpos += (targetscrollbarxpos - scrollbarxpos) / 100.0f; 基本
我有一个带有 Canvas 和 ScrollBar 的简单 JavaFX 应用程序。Canvas 充当虚拟 Canvas ,其内容可以使用 ScrollBar 滚动。 Canvas 的宽度为 500
我正在尝试实现类似于 Excel 的“无限”滚动能力的功能;因为用户可以滚动到文档的“底部”;但随后继续滚动(使用滚轮或滚动条上的向下箭头),并且为它们生成更多空行。我大部分时间都在工作(使用鼠标滚轮
我有一个奇怪的行为问题: 我在 ScrollView 中有一个 WebView。 WebView 声明如下: let webView = UIWebView(frame:CGRectMake(x,0,
我是一名优秀的程序员,十分优秀!