В ComboBox (JavaFX) после внедрения Lombok передаются адреса объектов а не атрибут по умолчанию
Код был абсолютно рабочим, однако решил сократить его с помощью Lombok (начал c геттеров и сеттеров). После применения соответствующих аннотаций @Getter, @Setter в ComboBox стали передаваться адреса объектов, а не их атрибут как раньше. Сущность
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Category {
private Integer categoryId;
private String categoryName;
private String categoryDesc;
public Category(Integer categoryId, String categoryName, String categoryDesc) {
this.categoryId = categoryId;
this.categoryName = categoryName;
this.categoryDesc = categoryDesc;
}
public Category() {
}
}
DAO
public class CategoryDAO implements Dao<Integer, Category> {
private static final CategoryDAO INSTANCE = new CategoryDAO();
private static final String FIND_ALL_SQL = """
SELECT tlg_category_id,
tlg_category_name,
tlg_category_description
FROM tlg_category
""";
private CategoryDAO() {
}
public List<Category> findAll() {
try (var connection = ConnectionManager.get();
var preparedStatement = connection.prepareStatement(FIND_ALL_SQL)) {
var resultSet = preparedStatement.executeQuery();
List<Category> categories = new ArrayList<>();
while (resultSet.next()) {
categories.add(buildCategory(resultSet));
}
return categories;
} catch (SQLException throwables) {
throwables.printStackTrace();
throw new DaoException(throwables);
}
}
public static CategoryDAO getInstance() {
return INSTANCE;
}
private Category buildCategory(ResultSet resultSet) throws SQLException {
return new Category(
resultSet.getInt("tlg_category_id"),
resultSet.getString("tlg_category_name"),
resultSet.getString("tlg_category_description")
);
}
}
Реализация ComboBox
public class TelegrammController implements Initializable {
public ObservableList<Category> categories = FXCollections.observableArrayList();
@FXML private ComboBox<Category> selectCategory;
private void selectCategory() {
CategoryDAO categoryDAO = CategoryDAO.getInstance();
categories.clear();
categories.addAll(categoryDAO.findAll());
selectCategory.getItems().addAll(categories);
}
}
Ответы (1 шт):
Автор решения: Fezas
→ Ссылка
В сущности было упущено нужное возвращаемое значение метода toString().
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Category {
private Integer categoryId;
private String categoryName;
private String categoryDesc;
public Category(Integer categoryId, String categoryName, String categoryDesc) {
this.categoryId = categoryId;
this.categoryName = categoryName;
this.categoryDesc = categoryDesc;
}
public Category() {
}
@Override
public String toString() {
return categoryName;
}
}
