java - 如何防止组合框中的项目在 javafx 中重复?

标签 java combobox javafx

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

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 代替 !=

关于java - 如何防止组合框中的项目在 javafx 中重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426839/

相关文章:

Java 创建 BufferedImage 实例卡住程序

javascript - 如何使用 JavaScript 更改组合框中的 "selected"值?

c# - 动态创建的 Winform 组合框都选择相同的值

delphi - 当其父级是面板时,ComboBox 无法正常工作

JavaFX:如何将图像添加到已在另一种方法中初始化的矩形中?

mysql - DerbyDB 中的增量 ID

java - init 方法调用失败;嵌套异常是 java.lang.IllegalArgumentException : Validation failed for query for method public abstract

java - Grails:java.lang.IllegalArgumentException:没有枚举常量

java - 使用 Gson 反序列化 Map<String, List<?>>

JavaFx 细线颜色失真