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

如何防止组合框中的项目在javafx中重复?,java,combobox,javafx,Java,Combobox,Javafx,我制作了一个可编辑的组合框……当你在其中键入内容时,你键入的任何内容都会进入列表底部。我遇到的问题是,当我点击组合框中已经存在的东西时,它不仅会被选中,还会作为一个新条目再次添加到组合框中,创建一个“重复”项。关于如何防止这种情况,有什么想法吗?这是我的 import javafx.scene.*; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.geometry.*; impor

我制作了一个可编辑的组合框……当你在其中键入内容时,你键入的任何内容都会进入列表底部。我遇到的问题是,当我点击组合框中已经存在的东西时,它不仅会被选中,还会作为一个新条目再次添加到组合框中,创建一个“重复”项。关于如何防止这种情况,有什么想法吗?这是我的

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);

  }

  }
导入javafx.scene.*;
导入javafx.scene.control.*;
导入javafx.scene.layout.GridPane;
导入javafx.geometry.*;
导入javafx.stage.*;
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
公共类问题扩展应用程序{
场景1;
可观测随机串;
public void start(Stage primaryStage)引发异常{
setTitle(“组合框问题!”);
primaryStage.SetResizeable(假);
primaryStage.sizeToScene();
GridPane GridPane=新建GridPane();
场景1=新场景(网格窗格);
ComboBox box1=新ComboBox();
randomStrings=FXCollections.observableArrayList(
“酷”,“伙计”,“兄弟!”,“怪人”,“IDK”
);   
框1.设置项(随机字符串);
框1.设置可编辑(真);
框1.设置值(空);
框1.设置操作(事件->{
字符串值=
box1.valueProperty().getValue();
如果(值!=String.valueOf(随机字符串)){
addAll(box1.valueProperty().getValue());
框1.设置值(空);
}
});
网格窗格。设置对齐(位置中心);
setConstraints(框1,0,0);
gridPane.getChildren().addAll(框1);
初生阶段:场景1;
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

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

!box1.getItems().contains(value)
该条件将添加到以下语句中

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

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

将字符串值与
进行比较=
==
运算符错误

value != String.valueOf(randomStrings)  // Incorrect
value.equals(String.valueOf(randomStrings)) // Correct but not logical in your use case
您可以检查输入值,然后将其添加到组合框的项目中:

box1.setOnAction( event ->
{
    if ( box1.getValue() != null && !box1.getValue().trim().isEmpty() )
    {
        String value = box1.getValue().trim();
        if ( !randomStrings.contains( value ) )
        {
            randomStrings.add( value );
            box1.setValue( null );
        }
    }
} );

@ItachiUchiha再次感谢您回答我的另一个noob问题,我非常感谢您的帮助欢迎来到StackOverflow。请仔细检查一下。首先,如果你想交流什么,就对答案进行评论。如果答案有助于解决你的问题,就接受它。如果没有人这样做,并且您已经重新创建了解决方案,您可以发布并接受它。接受答案有助于未来读者面对类似问题。