当前位置: 首页 > 知识库问答 >
问题:

Java FX筛选器表视图

穆轶
2023-03-14

我正在尝试使用文本字段筛选表视图,我需要一个文本字段(txtSearch)来搜索“nhs编号”、“名字”、“姓氏”和“分类类别”。我曾尝试在网上实施各种解决方案,但没有成功,我对这一切还是新手,所以如果问得不好,我深表歉意。任何帮助都将不胜感激,我的代码如下。

公共类QueueTabPageController实现可初始化{

@FXML
private TableView<Patient> tableView;

@FXML
private TableColumn<Patient, String> NHSNumberColumn;

@FXML
private TableColumn<Patient, String> firstNameColumn;

@FXML
private TableColumn<Patient, String> lastNameColumn;

@FXML
private TableColumn<Patient, String> timeEnteredColumn;

@FXML
private TableColumn<Patient, String> triageAssessmentColumn;

@FXML
private TextField filterField;

@FXML
private QueueTabPageController queueTabPageController;

private ObservableList<Patient> tableData;

// public static LinkedList<Patient> displayQueue;


/**
     * Initializes the controller class. This method is automatically called
     * after the fxml file has been loaded.
     * 
     * Initializes the table columns and sets up sorting and filtering.
     */
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

        assert tableView != null : "fx:id=\"tableView\" was not injected: check your FXML file 'FXMLQueueTabPage.fxml'";

        NHSNumberColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("nhsNumber"));
        firstNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("firstName"));
        lastNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("lastName"));
        timeEnteredColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("timeEnteredString"));
        triageAssessmentColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("triage"));

        // display the current queue to screen when opening page each time
        displayQueue(Queue.queue);

        // 0. Initialize the columns.
        //firstNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("firstName"));
        //lastNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("lastName"));

        // 1. Wrap the ObservableList in a FilteredList (initially display all
        // data).
        FilteredList<Patient> filteredData = new FilteredList<>(tableData,
                p -> true);

        // 2. Set the filter Predicate whenever the filter changes.
        filterField.textProperty().addListener(
                (observable, oldValue, newValue) -> {
                    filteredData.setPredicate(Patient -> {
                        // If filter text is empty, display all persons.
                            if (newValue == null || newValue.isEmpty()) {
                                return true;
                            }

                            // Compare first name and last name of every person
                            // with filter text.
                            String lowerCaseFilter = newValue.toLowerCase();

                            if (Patient.getFirstName().toLowerCase()
                                    .contains(lowerCaseFilter)) {
                                return true; // Filter matches first name.
                            } else if (Patient.getLastName().toLowerCase()
                                    .contains(lowerCaseFilter)) {
                                return true; // Filter matches last name.
                            }
                            return false; // Does not match.
                        });
                });

        // 3. Wrap the FilteredList in a SortedList.
        SortedList<Patient> sortedData = new SortedList<>(filteredData);

        // 4. Bind the SortedList comparator to the TableView comparator.
        sortedData.comparatorProperty().bind(tableView.comparatorProperty());

        // 5. Add sorted (and filtered) data to the table.
        tableView.setItems(sortedData);

    }

此处出现错误(步骤4):

(TableView.comparatorProperty());

和(步骤5)

TableView.setItems(sortedData);

说明:无法从类型TableView对非静态方法setItems(ObservableList)进行静态引用

共有1个答案

邴星洲
2023-03-14

您的表视图定义为:

@FXML
private TableView<Patient> tableView;

所以

尝试把:(tableView.comparatorProperty());

而不是:(TableView.comparatorProperty());

并对:TableView执行相同的操作。设置项目(sortedData)

我建议您更改其他与tableView不同的视图,例如patientTable!

让我知道它是否有效!

 类似资料:
  • 我想编写一个方法,在该方法中传递textfield(filterField)、来自tableview(data)和tableview(table)的数据,以便筛选所有表数据,每次在textfield中释放键时,都会检查键入的字符串是否包含在表的任何单元格中。 为此,我使用以下代码: 此代码仅在textfield中的字符串与表中任何单元格的值完全匹配时返回值。 我将需要它返回表中包含键入字符串的任何

  • 首先,我试图使选择所有复选框,如果我单击表头中的选择所有复选框,整个表行将选择并显示一个复选框反向消息,即我选择了多少复选框。这里的问题是,如果我单击select all复选框,反向消息不会显示楼上的表,即我选择了多少行。 其次,如果我从任何列中筛选任何数字,相同的数字将显示同一列中有多少行具有相同的数字。如果我选中了所有复选框,那么反向消息将显示我选中了多少行复选框。这里,问题是显示整个表行计数

  • 我有一个谷歌表格数据透视表,里面有日期的交易。源数据每天更新。我知道如何为一个月内的所有交易手动设置过滤器,例如,02/01/19和02/29/19之间的日期。 如果我只想查看当月的所有数据,而不想手动选择特定月份,该怎么办?如果是3月15日,我只想看到从3月1日到当前日期的交易,并在4月到来时自动更新,而不必手动选择4月。 你对如何做到这一点有什么想法吗?

  • 有什么建议吗?

  • 筛选器。 Usage 全部引入 import { Picker } from 'beeshell'; 按需引入 import Picker from 'beeshell/dist/components/Picker'; Examples Code import { Picker } from 'beeshell'; <Picker ref={(c) => { this._pick

  • 我在正确表达ElasticSearch regexp过滤器的regexp时遇到了问题。我正在尝试匹配url字段中“info-for/media”中的任何内容,例如http://mydomain.co.uk/info-for/media/press-release-1。为了尝试获得正确的正则表达式,我现在使用,但最终将是带有用户查询字符串的。 发布到localhost:9200/_search 这返