<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi,</p>
<p>Normally a cell will have computed values for each of the
min/pref/max. In your example, you were resetting the cells to
USE_PREF_SIZE, but it makes little difference in the reasoning.
All the size of a cell control (which is a label) will be the
label's size to display its text. Its preferred height will be
say 20. Its minimum will also be 20 to avoid cuts off. Its
maximum will be 20 because there is no reason for it to take up
more space. Those are the computes sizes. If you change all to
USE_PREF_SIZE, nothing changes (since pref is 20, min and max will
copy that). So:<br>
</p>
<p>- min/pref/max height are 20/20/20<br>
- you set minimum to 6<br>
- end result: pref height wins with 20 as it is within the range
[min, max]<br>
- you also set maximum to 1<br>
- end result: pref height is now outside the min/max range, so it
is ignored; max is smaller than min, so it is ignored; min wins
with 6<br>
</p>
<p>If you however set minimum to USE_PREF_SIZE (as was done in your
original code) or set it to 1, then you can use the pref size to
change it. Either because 1 is smaller than the pref size, and so
changing pref size to a smaller value won't make it go out of
range; or in the USE_PREF_SIZE case, because min will simply track
the pref size value and always change with it.</p>
<p>--John</p>
<div class="moz-cite-prefix">On 09/11/2025 03:44, Cormac Redmond
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAG_-AaAnqe9gjkrh29NACBBbB7PRrTx+C+UgR007rrOtpKVhpg@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">
<div class="gmail_default"
style="font-family:verdana,sans-serif">Hi John,</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Thanks for the
reply & details. One remaining question in my previous
mail however, was why a max <b>needs</b> to be set for min
to "win"...this still didn't make sense.</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Similarly, I had
already tried prefHeight on its own, but it has no effect
(unless it's set to number higher than the computed size
of the cell, in which case it would increase the size).
Setting prefHeight and minHeight together though, can
achieve setting a "max height" though, just like setting a
maxHeight and minHeight as per my previous mail.</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">
<div class="gmail_default"><br>
</div>
<div class="gmail_default">But I've noticed that values
prefHeight, minHeight, maxHeight are all defaulted to
USE_COMPUTED_SIZE (-1)..., <b>not USE_PREF_SIZE</b> as
you mentioned, and I assumed.</div>
<div class="gmail_default"><br>
</div>
<div class="gmail_default">So this explains the above
behaviour and why several need to be set: otherwise
computed size wins one way or another.</div>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Although confusing
initially, I assume there's no bug here and that the
developer needs to always check the underlying nature of
how pref/min/max default values are set for any node, in
order to know what and how to override their settings...?</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">If you want some
validation, you can see these -1 defaults, via a simpler
example:</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default" style=""><font size="1"
face="monospace">public class ComboBoxHeightBug2 extends
Application {<br>
public static void main(String[] args) {<br>
launch(args);<br>
}<br>
<br>
public void start(Stage stage) {<br>
ComboBox<Object> cb = new
ComboBox<>();<br>
cb.getItems().addAll("Apple", "Banana",
"Carrot", "Lettuce");<br>
cb.setCellFactory(_ -> new ListCell<>()
{<br>
protected void updateItem(Object item,
boolean empty) {<br>
super.updateItem(item, empty);<br>
if (empty || item == null) {<br>
setText(null);<br>
setGraphic(null);<br>
} else if (item instanceof Separator) {<br>
setText(null);<br>
setGraphic((Separator) item);<br>
setDisable(true);<br>
} else {<br>
System.out.println("minHeight: " +
getMinHeight()); // -1<br>
System.out.println("maxHeight: " +
getMaxHeight()); // -1<br>
System.out.println("prefHeight: " +
getPrefHeight()); // -1<br>
setText(item.toString());<br>
setGraphic(null);<br>
setStyle("");<br>
}<br>
}<br>
});<br>
<br>
cb.getSelectionModel().selectFirst();<br>
stage.setScene(new Scene(cb, 200, 100));<br>
stage.show();<br>
}<br>
}</font></div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Kind Regards,</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Cormac</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
</div>
</div>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sun, 9 Nov 2025 at
00:06, John Hendrikx <<a
href="mailto:john.hendrikx@gmail.com" target="_blank"
moz-do-not-send="true" class="moz-txt-link-freetext">john.hendrikx@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>What you are likely seeing is that the minimum always
wins over the other values.</p>
<p>The minimum height is set to the constant <span
class="gmail_default"
style="font-family:verdana,sans-serif"></span>USE_PREF_SIZE,
which means that it will take the preferred size for
the minimum height.</p>
<p>When it comes to size priorities (min, pref and max),
minimum always wins, then comes maximum, then comes
preferred.</p>
<p>So in this case, the preferred size is say 20. The
minimum follows the preferred, also 20. You set
maximum to 1. Minimum > Maximum, so Maximum is
ignored.</p>
<p>What you could try is set preferred size smaller
instead; there should be no need to change minimum or
maximum then.</p>
<p>--John<br>
</p>
<div>On 08/11/2025 21:30, Cormac Redmond wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div style="font-family:verdana,sans-serif">Hi,</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">I have
found a height bug when I am trying to reduce the
height of one ComboBox item (a Separator) in a
simple ComboBox.</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">One
would expect that to achieve this, you'd set the
maximum height for that particular ListCell; but
this has no effect.</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">Instead
what I need to do is set the <i>minimum</i>
height (but to the value I wish to be the maximum
height), and I must <b>also </b>set the <i>maximum
</i>height to any value (if I do not, my minimum
height (i.e., my desired maximum) gets ignored)...</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">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.</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">Obviously
this is counter-intuitive and doesn't
make any logical sense.</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">Example
to reproduce (running from JFX master branch):</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div><font face="monospace"><span
class="gmail_default"
style="font-family:verdana,sans-serif"></span>public
class ComboBoxHeightBug extends Application {<br>
public static void main(String[] args) {<br>
launch(args);<br>
}<br>
<br>
public void start(Stage stage) {<br>
ComboBox<Object> cb = new
ComboBox<>();<br>
cb.getItems().addAll("Apple", "Banana", </font>
<span style="font-family:monospace">new
Separator()</span> <font face="monospace">,
"Carrot", "Lettuce");<br>
cb.setCellFactory(_ -> new
ListCell<>() {<br>
protected void updateItem(Object
item, boolean empty) {<br>
super.updateItem(item, empty);<br>
if (empty || item == null) {<br>
setText(null);<br>
setGraphic(null);<br>
setStyle("");<br>
</font><span style="font-family:monospace">
// Set back to default</span><br
style="font-family:monospace">
<font face="monospace">
setMinHeight(USE_PREF_SIZE);<br>
setMaxHeight(Double.MAX_VALUE);<br>
} else if (item instanceof
Separator) {<br>
setText(null);<br>
setGraphic((Separator)
item);<br>
setDisable(true);<br>
setMinHeight(6); // This is
required for any "max height" to apply, and
appears to be the value that is used to
determine height<br>
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<br>
} else {<br>
setText(item.toString());<br>
setGraphic(null);<br>
setStyle("");<br>
// Set back to default<br>
setMinHeight(USE_PREF_SIZE);<br>
setMaxHeight(Double.MAX_VALUE);<br>
}<br>
}<br>
});<br>
<br>
cb.getSelectionModel().selectFirst();<br>
stage.setScene(new Scene(cb, 200, 100));<br>
stage.show();<br>
}<br>
}</font></div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">Note: I
have noticed a few issues like this in general,
whereby it requires trial and error to get <i>some</i> 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)...</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">Kind
Regards,</div>
<div style="font-family:verdana,sans-serif">Cormac</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</body>
</html>