检查ListView是否<;字符串>;包含一个字符串-JavaFX

检查ListView是否<;字符串>;包含一个字符串-JavaFX,java,string,listview,javafx,contains,Java,String,Listview,Javafx,Contains,我正在制作一个JavaFX应用程序,其中有一个组合框,因此当我单击组合框中的任何项目时,我将该项目添加到字符串课程,然后将课程字符串附加到我的列表视图 但同时,我不想在ListView中添加任何重复项 那么,可能的方法是什么呢? 有没有办法检查ListView是否包含它? 我尝试过,但无法将contains与ListView和字符串课程一起使用 @FXML private ComboBox<String> select_subject; @FXML

我正在制作一个JavaFX应用程序,其中有一个
组合框
,因此当我单击组合框中的任何项目时,我将该项目添加到
字符串课程
,然后将课程字符串附加到我的
列表视图

但同时,我不想在ListView中添加任何重复项

那么,可能的方法是什么呢? 有没有办法检查ListView是否包含它? 我尝试过,但无法将contains与ListView和
字符串课程一起使用

    @FXML
    private ComboBox<String> select_subject;

    @FXML
    private ListView<String> course_list;

    public void diplaysubjects() {
            String course = select_subject.getSelectionModel().getSelectedItem();
                   course_list.getItems().add(course.toString());
    }
@FXML
专用组合框选择主题;
@FXML
私有列表查看课程列表;
公共科目{
String course=select_subject.getSelectionModel().getSelectedItem();
course_list.getItems().add(course.toString());
}

我建议您在ListView中使用可观察列表。 你喜欢这样吗

public class Controller implements Initializable {

@FXML
private ComboBox<String> select_subject;

@FXML
private ListView<String> course_list;

private ObservableList<String> list = FXCollections.observableArrayList();

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    course_list.setItems(list);
}

public void diplaysubjects() {
    String course = select_subject.getSelectionModel().getSelectedItem();
    //Instead of adding directly to listview add to observablelist
    //course_list.getItems().add(course.toString());
    list.add(course);
}

//To check the list contains the item
private boolean doesExists(String element){
    return list.contains(element);
}
}
公共类控制器实现可初始化{
@FXML
专用组合框选择主题;
@FXML
私有列表查看课程列表;
私有ObservableList=FXCollections.observableArrayList();
@凌驾
公共void初始化(URL、ResourceBundle、ResourceBundle){
课程列表。设置项目(列表);
}
公共科目{
String course=select_subject.getSelectionModel().getSelectedItem();
//不是直接添加到listview,而是添加到observablelist
//course_list.getItems().add(course.toString());
列表。添加(课程);
}
//检查列表是否包含该项
私有布尔值(字符串元素){
返回列表。包含(元素);
}
}
您可以添加一个arrayList(),在其中添加字符串(如果不包含该字符串),然后将其添加到ListView

@FXML
专用组合框选择主题;
@FXML
私有列表查看课程列表;
公共科目{
ArrayList s=新的ArrayList();
String course=select_subject.getSelectionModel().getSelectedItem();
如果(!s.contains(课程)){
s、 增加(课程);
course_list.getItems().add(course.toString());
}
}

您可以使用
ObservableList.contains
方法快速检查类似项目的出现情况:

public void diplaysubjects() {
    String item = select_subject.getSelectionModel().getSelectedItem();
    ObservableList<String> courses = course_list.getItems(); // Only here to clarify the code

    if (!courses.contains(item))
        courses.add(item);
}
public void diplay subjects(){
String item=select_subject.getSelectionModel().getSelectedItem();
ObservableList courses=course_list.getItems();//仅在此处澄清代码
如果(!courses.contains(项目))
课程。增加(项目);
}

我不知道您的代码使用了哪种模式,但如果它是类似MVC的,我建议您直接使用模型的可观察列表,而不是调用
课程列表.getItems()

我不能使用contains为什么不,可观察列表是-a list;)顺便说一句:a)使用适当的自定义单元格(vs字符串)将课程添加到combo和listView中b)坚持java命名约定swell。。这是完全错误的:a)if块将始终执行(因为s是一个空数组)b)即使它没有执行(在重新组织代码之后),为什么要保留listView项的副本c)string.toString充其量是冗余的没有理由a)保留listView项的别名b)通过围绕包含的方法填充代码(只要它不做其他事情)