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