如何做到这一点,以便JavaFX ComboBox中没有重复项

时间:2019-03-20 17:00:03

标签: java javafx java-8

在此程序中,您可以使用文本字段将单词添加到ComboBox。您将如何做到这一点,使程序不会接受ComboBox中已经存在的任何单词?我试图做到这一点,因此,如果文本字段输入等于ComboBox中的内容,则不应添加它,但将无法使用。

package gps_destinations_controller;

import gps_destinations_model.Model;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.SingleSelectionModel;
import javafx.scene.control.TextField;

public class Controller implements Initializable 
{
    @FXML TextField destinationInput;
    @FXML ComboBox<String> destinationList;
    private SingleSelectionModel<String> selectionModel;

    private Model model;

    @Override
    public void initialize(URL url, ResourceBundle rb) 
    {
    model = new Model();

    destinationList.getItems().addAll(model.getDestinations());

    selectionModel = destinationList.getSelectionModel();  

    selectionModel.select(model.getSelectedIndex());
        System.out.println(destinationList.getItems());



    }    

    @FXML protected void addDestination() 
    {
        String input = destinationInput.getText();

         if(!destinationList.getItems().equals(input))
         {
        destinationList.getItems().add(input);
         }


        model.addDestination(input);


        destinationInput.clear();

    }






    @FXML protected void itemSelected( ActionEvent event ) 
    {
    int index = selectionModel.getSelectedIndex();
    model.updateSelection(index);

    }
}

1 个答案:

答案 0 :(得分:5)

您正在将items列表本身与要添加的元素进行比较。这总是产生false,并且总是添加项目。您需要使用contains来检查列表中是否已有元素:

if(!destinationList.getItems().contains(input)) {
    destinationList.getItems().add(input);
}