gpt4 book ai didi

mysql - 过滤数据以从 javafx 中的数据库显示

转载 作者:行者123 更新时间:2023-11-29 01:29:16 26 4
gpt4 key购买 nike

我想在 TableView 中仅显示某些信息,例如数据库中仅显示“男性”人员。我只是在使用 javafx。提前感谢您的帮助。

这是我当前的表 enter image description here

我想过滤表格,以便表格中只显示“订单状态:已付款”的行。

最佳答案

如果可以使用 java 8,则可以使用内置的 FilteredList 和谓词。这是我为测试正则表达式过滤而写的东西。我对其进行了一些修改,使其更像您的示例,并在需要时使用 javafx 2.2。只需更改一些注释行以使用 java 8。

import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TableTest extends Application {

@Override
public void start(Stage primaryStage) {
ObservableList<LineItem> items = FXCollections.observableArrayList();
items.addAll(new LineItem("hello",123.45),
new LineItem("paid in full",0.01),
new LineItem("paid",0.01),
new LineItem("due",0.01),
new LineItem("paid",0.01));

//for java8
//FilteredList<LineItem> filteredItems = new FilteredList(items, e->true);

//not java8
ObservableList<LineItem> filteredItems = FXCollections.observableArrayList(items);

TableView tableView = new TableView(filteredItems);

TableColumn<LineItem,String> descCol = new TableColumn<>("desc");
descCol.setCellValueFactory(new PropertyValueFactory<>("desc"));

TableColumn<LineItem, Double> amountCol = new TableColumn<>("amount");
amountCol.setCellValueFactory(new PropertyValueFactory<>("amount"));

tableView.getColumns().addAll(descCol,amountCol);

TextField filterText = new TextField();
filterText.setPromptText("type filter and press enter");
filterText.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
//normal java8
//filteredItems.setPredicate(li -> li.desc.getValue().contains(filterText.getText()));
//regex java 8
//filteredItems.setPredicate(li -> li.desc.getValue().matches("(?i)"+filterText.getText()));
//not javafx 8
filteredItems.clear();
for (LineItem li: items)
if (li.desc.getValue().contains(filterText.getText()))
filteredItems.add(li);
}
});

VBox root = new VBox();
root.getChildren().addAll(tableView, filterText);
Scene scene = new Scene(root, 300, 300);

primaryStage.setTitle("Filter table test");
primaryStage.setScene(scene);
primaryStage.show();
}


public class LineItem {

private final StringProperty desc = new SimpleStringProperty();
private final DoubleProperty amount = new SimpleDoubleProperty();

public StringProperty descProperty() {return desc;}
public DoubleProperty amountProperty() {return amount;}

public LineItem(String dsc, double amt) {
desc.set(dsc); amount.set(amt);
}
}

}

tod​​o,据说有一种方法可以绑定(bind) predicateProperty,但我想不通。

编辑:如果你想要一个绑定(bind),而不是 ActionEvent 的处理程序,做类似的事情

filteredItems.predicateProperty().bind(
Bindings.createObjectBinding(() ->
li -> li.desc.getValue().contains(filterText.getText()),
filterText.textProperty())
);

关于mysql - 过滤数据以从 javafx 中的数据库显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com