Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lọc dữ liệu để hiển thị từ cơ sở dữ liệu trong javafx

Nếu bạn có thể sử dụng java 8, bạn có thể sử dụng FilteredList và vị ngữ được tích hợp sẵn. Đây là một cái gì đó tôi đã viết để kiểm tra khả năng lọc regex. Tôi đã sửa đổi nó một chút để giống với ví dụ của bạn hơn và sử dụng javafx 2.2 nếu được yêu cầu. Chỉ cần thay đổi một số dòng nhận xét để sử dụng 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);
        }
    }

}

việc làm, được cho là có một cách để liên kết predicateProperty, nhưng tôi không thể tìm ra điều đó.

Chỉnh sửa:Nếu bạn muốn có một ràng buộc, thay vì trình xử lý cho ActionEvent, hãy làm điều gì đó như

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysqldump nhiều hơn một bảng?

  2. Bộ điều hợp Zend db mysqli hoặc PDO_MYSQL

  3. Kiến trúc cơ sở dữ liệu cho hàng triệu hàng mới mỗi ngày

  4. PHP và MySQL:Thứ tự theo ngày gần đây nhất và giới hạn 10

  5. Chọn các bản ghi từ hôm nay, tuần này, tháng này php mysql