JavaFX Combobox отображает запись, отличную от выбраннойJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JavaFX Combobox отображает запись, отличную от выбранной

Сообщение Anonymous »

Я заметил, что значение, отображаемое в ComboBox после выбора одного из списка, может отличаться от выбранного, если два значения равны в соответствии с их методом равенства (но имеют разное представление в соответствии с методом toString, поэтому отображаются по-разному).

Это можно увидеть из следующего примера программы

Код: Выделить всё

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;
}
}
}
где выбор элемента B приводит к следующему:

Изображение


Кроме того, кажется невозможным впоследствии выбрать A.

Первым вариантом решения этой проблемы, очевидно, будет изменение метод равенства, но я не хочу делать это в моем случае, потому что мой реальный класс также имеет метод сравнения, и я хочу, чтобы они были согласованными.

Вторым вариантом было бы создание класса-оболочки вокруг EqualContent, который также учитывает строковое представление для равных. Я, конечно, мог бы это сделать, но меня это не совсем устраивает.

Может быть, мне не хватает более простого или элегантного решения?

Подробнее здесь: https://stackoverflow.com/questions/540 ... n-selected
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»