Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在搜索中比较SimpleStringProperty_Java_Javafx - Fatal编程技术网

Java 在搜索中比较SimpleStringProperty

Java 在搜索中比较SimpleStringProperty,java,javafx,Java,Javafx,我有一个在场景中填充的TableView。我正在搜索对象属性以查看它们是否匹配,并且该属性返回StringProperty[value:3]。我只是想找到正确的方法来完成这个比较 代码如下: @FXML public void searchParts(ActionEvent event) throws IOException{ System.out.println("Searching for part: " + searchPart.getText()); String partSea

我有一个在场景中填充的TableView。我正在搜索对象属性以查看它们是否匹配,并且该属性返回StringProperty[value:3]。我只是想找到正确的方法来完成这个比较

代码如下:

@FXML
public void searchParts(ActionEvent event) throws IOException{
  System.out.println("Searching for part: " + searchPart.getText());
  String partSearchable = searchPart.getText();
      for (int i = 0; i < parts.size(); i++) {
         System.out.println(parts.get(i).nameProperty());           

          if (parts.get(i).nameProperty().equals(new SimpleStringProperty(partSearchable))) {
            partsList.clear();
            partsList.add(parts.get(i));
            populateTable();
            break;
         }  
     }
    partsList.clear();
    populateTable();
}
进行此比较的正确方法是什么?

执行以下操作:

if (parts.get(i).getName().equals(partSearchable)) {

首先,不应在属性访问器方法中创建新属性。您还应该将类型公开为StringProperty,而不是SimpleStringProperty

做:

要执行比较时,请将属性的内容与感兴趣的字符串进行比较:

if (parts.get(i).nameProperty().get().equals(partSearchable)) { ... }
如果您还在类中定义了常用的get方法:

public final String getName() {
    return nameProperty().get();
}

// and, though it's irrelevant to this question, usually also 
public final void setName(String name) {
    nameProperty().set(name);
}
那你当然可以这么做

if (parts.get(i).getName().equals(partSearchable)) { ... }

您不应该仅仅为了比较名称属性而创建新的SimpleStringProperty对象。searchParts方法的实际逻辑毫无意义。是否仅搜索一个匹配的项目?为什么你在搜索后要清除列表。。。你总是会得到一个空列表。我做了这些更改,但是比较仍然不起作用。打印parts.geti.getName时;它像这样打印属性。。。仍然:StringProperty[value:3]。@Jamie您首先是如何设置name的值的?也许问题就在那里。请不要误会,但您发布的代码有太多错误,您可能需要备份并理解一些基本Java,然后再尝试使用类似JavaFX的中等复杂框架。这就是我在学校学习的方式。不幸的是,到目前为止,我学到了很多。我将做一点改变,我刚刚注意到我的逻辑将使表永远不会填充,尝试将其分为两个可观察列表@Jamie如果nameProperty和getName给出相同的结果,那么您就没有按照我建议的方式完成。
public final String getName() {
    return nameProperty().get();
}

// and, though it's irrelevant to this question, usually also 
public final void setName(String name) {
    nameProperty().set(name);
}
if (parts.get(i).getName().equals(partSearchable)) { ... }