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