我做了一个可编辑的组合框.....,当您在其中键入内容时,您键入的内容都将进入列表底部。我遇到的问题是,当我单击组合框中已经存在的某物时,它不仅被选中,还作为新条目再次添加到组合框中,从而创建了关于如何防止这种情况的“重复”的任何想法?这就是我所拥有的。

import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.geometry.*;
import javafx.stage.*;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class ComboBoxProblem extends Application {

Scene scene1;

ObservableList<String> randomStrings;





 public void start(Stage primaryStage)throws Exception{
    primaryStage.setTitle("ComboBox Problem!");
    primaryStage.setResizable(false);
    primaryStage.sizeToScene();

    GridPane gridPane = new GridPane();

    scene1 = new Scene(gridPane);

    ComboBox<String> box1 = new ComboBox<String>();

    randomStrings = FXCollections.observableArrayList(
            "Cool","Dude","BRO!","Weirdo","IDK"

   );



   box1.setItems(randomStrings);

   box1.setEditable(true);

   box1.setValue(null);
   box1.setOnAction(event -> {
      String value =

       box1.valueProperty().getValue();


       if( value != String.valueOf(randomStrings)){


           randomStrings.addAll(box1.valueProperty().getValue());
           box1.setValue(null);
       }


   });
   gridPane.setAlignment(Pos.CENTER);
   gridPane.setConstraints(box1,0,0);



   gridPane.getChildren().addAll(box1);


   primaryStage.setScene(scene1);
   primaryStage.show();

  }




  public static void main(String[] args) {
    launch(args);

  }

  }

最佳答案

只需在按钮的动作上添加另一个条件,即可检查字符串是否已存在于项目列表中。如果没有,请添加它。

!box1.getItems().contains(value)


该条件将添加到以下语句中。

if (!value.equals(String.valueOf(randomStrings)) &&
                                  !box1.getItems().contains(value)){
    randomStrings.addAll(value);
    box1.setValue(null);
}


正如@uluk正确指出的,您比较字符串的方式不正确,必须使用equals代替!=

10-08 01:40