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