ComboBox item height bug
Cormac Redmond
credmond at certak.com
Sat Nov 8 20:30:21 UTC 2025
Hi,
I have found a height bug when I am trying to reduce the height of one
ComboBox item (a Separator) in a simple ComboBox.
One would expect that to achieve this, you'd set the maximum height for
that particular ListCell; but this has no effect.
Instead what I need to do is set the *minimum* height (but to the value I
wish to be the maximum height), and I must *also *set the *maximum *height
to any value (if I do not, my minimum height (i.e., my desired maximum)
gets ignored)...
For example, if I want the maximum height of this Separator to be 6, I must
set the minimum height to 6 and I must set the maximum height to anything,
even 1.
Obviously this is counter-intuitive and doesn't make any logical sense.
Example to reproduce (running from JFX master branch):
public class ComboBoxHeightBug extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage stage) {
ComboBox<Object> cb = new ComboBox<>();
cb.getItems().addAll("Apple", "Banana", new Separator() ,
"Carrot", "Lettuce");
cb.setCellFactory(_ -> new ListCell<>() {
protected void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
setStyle("");
// Set back to default
setMinHeight(USE_PREF_SIZE);
setMaxHeight(Double.MAX_VALUE);
} else if (item instanceof Separator) {
setText(null);
setGraphic((Separator) item);
setDisable(true);
setMinHeight(6); // This is required for any "max
height" to apply, and appears to be the value that is used to determine
height
setMaxHeight(1); // Setting this (to 6) should work on
its own, it doesn't, the value appears irrelevant -- but it MUST be set to
get the separator height to be 6
} else {
setText(item.toString());
setGraphic(null);
setStyle("");
// Set back to default
setMinHeight(USE_PREF_SIZE);
setMaxHeight(Double.MAX_VALUE);
}
}
});
cb.getSelectionModel().selectFirst();
stage.setScene(new Scene(cb, 200, 100));
stage.show();
}
}
Note: I have noticed a few issues like this in general, whereby it requires
trial and error to get *some* desired height to apply; without any apparent
logic as to how these values are being arrived at or how they're triggered
to be used (I have logged bugs before on this)...
Kind Regards,
Cormac
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251108/293e54c0/attachment.htm>
More information about the openjfx-dev
mailing list