Это можно увидеть из следующего примера программы
Код: Выделить всё
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Group group = new Group();
Scene scene = new Scene(group,100,40);
ObservableList content = FXCollections.observableArrayList();
content.add(new EqualContent("A"));
content.add(new EqualContent("B"));
Label selection = new Label();
ComboBox demoBox = new ComboBox(content);
demoBox.setOnAction(event -> selection.setText(" selected: "+demoBox.getValue()));
group.getChildren().add(new HBox(demoBox, selection));
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
class EqualContent {
private String name;
EqualContent(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
@Override
public boolean equals(Object other) {
return other != null;
}
@Override
public int hashCode() {
return 0;
}
}
}

Кроме того, кажется невозможным впоследствии выбрать A.
Первым вариантом решения этой проблемы, очевидно, будет изменение метод равенства, но я не хочу делать это в моем случае, потому что мой реальный класс также имеет метод сравнения, и я хочу, чтобы они были согласованными.
Вторым вариантом было бы создание класса-оболочки вокруг EqualContent, который также учитывает строковое представление для равных. Я, конечно, мог бы это сделать, но меня это не совсем устраивает.
Может быть, мне не хватает более простого или элегантного решения?
Подробнее здесь: https://stackoverflow.com/questions/540 ... n-selected
Мобильная версия