Out of curiosity I decided to take a look at this bug. I’m a Java and JavaFX 
newbie so take this all with a massive grain of salt.

It’s not at all clear how to take the control's cumulative transform and create 
a transform to apply to the popup. Even isolating the scale is tricky if a 
rotation was applied somewhere along the Node chain. If JavaFX tried to do this 
itself I suspect defining the behavior would be way more difficult than 
implementing it.

It’s possible for a client to do this directly for some controls including 
ComboBoxes. Create a subclass of the ComboBox skin (the base class would be 
ComboBoxListViewSkin) and override it’s getPopupContent() method to retrieve 
the Node from super and apply whatever transforms you want. Then create a 
subclass of ComboBox and override it’s createDefaultSkin() method to return an 
instance of your custom skin.

This approach also works for ColorPickers and DatePickers. I couldn’t see any 
way of applying it to ChoiceBoxes, internally they use ContextMenus and don’t 
expose them in any way. I think that would be an easy problem to solve. 
MenuBars are too deep for me.

public class CustomComboBoxSkin<T> extends ComboBoxListViewSkin<T> {
    public CustomComboBoxSkin(ComboBox<T> comboBox) {
        super(comboBox);
    }

    @Override
    public Node getPopupContent() {
        Node result = super.getPopupContent();
        result.getTransforms().setAll(new Scale(0.5, 0.5, 0.0, 0.0));
        return result;
   }
}

public class CustomComboBox<T> extends ComboBox<T> {
    @Override
    protected Skin<?> createDefaultSkin() {
        return new CustomComboBoxSkin<>(this);
    }
}

> On Mar 7, 2022, at 8:20 AM, Kevin Rushforth <kevin.rushfo...@oracle.com> 
> wrote:
> 
> This sounds like JDK-8088757 [1], "Scale of control does not cross to popup 
> in popup-based controls". Yes, it does seems like a legitimate bug to me. 
> Fixing it might result in a surprising behavior change for some existing 
> applications, given how long this behavior has been in place (the bug in 
> question was filed 10 years ago), but that's not a good enough reason to 
> avoid fixing the bug. As usual, it will come down to priorities. If someone 
> has time to fix this, it will make it a lot more likely for it to be fixed.
> 
> -- Kevin
> 
> [1] https://bugs.openjdk.java.net/browse/JDK-8088757
> 
> On 3/6/2022 4:52 PM, Neacsu Cristian wrote:
>> Hello,
>> 
>> I am using ComboBoxes all over the place in my application.
>> Until now, my application was in full-screen mode. Now due to the request
>> of clients to create the possibility to move it around on multiple screen,
>> I created the option to move it on dual screens and so on. To achieve
>> different resolution I am using the Scale transformation and add it to the
>> main node, in order to scale everything.
>> Everything is working properly, but the drop down list is taking the width
>> of the combo box unscaled (and if resolution differs from the one that was
>> initiated, the drop down list width will differ from the combobox itself).
>> Is it a legit bug?
>> 
>> Thank you in advance,
>> Cristian-Stefan
> 


Reply via email to