在此程序中,您可以使用文本字段将单词添加到组合框。您将如何做到这一点,使程序不会接受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);

    }
}

最佳答案

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

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

10-04 21:04