Как сделать так, чтобы в JavaFX ComboBox не было дубликатов - PullRequest
3 голосов
/ 20 марта 2019

В этой программе вы можете добавлять слова в 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 Ответ

5 голосов
/ 20 марта 2019

Вы сравниваете сам список items с элементом, который хотите добавить.Это всегда приводит к false, и элемент всегда добавляется.Вам нужно использовать contains, чтобы проверить, есть ли элемент в списке:

if(!destinationList.getItems().contains(input)) {
    destinationList.getItems().add(input);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...