This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new 35bc313e2 CayenneModeler .. Messy combo box sizing for editable popups
35bc313e2 is described below

commit 35bc313e20691a4cc12c8413e528cd4f297c1934
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sat May 23 08:39:51 2026 -0400

    CayenneModeler .. Messy combo box sizing for editable popups
    
    fixing an issue on windows
---
 .../modeler/toolkit/table/CMComboBoxCellEditor.java        | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMComboBoxCellEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMComboBoxCellEditor.java
index 1cc28d3b9..d0e207a77 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMComboBoxCellEditor.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMComboBoxCellEditor.java
@@ -62,7 +62,21 @@ public class CMComboBoxCellEditor extends AbstractCellEditor
         comboBox.addPopupMenuListener(new PopupMenuListener() {
             @Override
             public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                // First call: sets popup.preferredSize so the popup *window* 
is created at the
+                // correct width (window size is determined from 
popup.preferredSize before show()).
                 adjustPopupWidth();
+                // Second call via invokeLater: BasicComboPopup.show() calls 
getPopupLocation()
+                // *after* firing this listener, which re-constrains 
scroller.maxSize back to the
+                // column width. Running again on the next EDT cycle fixes the 
scroller, then
+                // revalidate/repaint forces the layout to update inside the 
already-wide window.
+                SwingUtilities.invokeLater(() -> {
+                    adjustPopupWidth();
+                    Object child = 
comboBox.getUI().getAccessibleChild(comboBox, 0);
+                    if (child instanceof JPopupMenu popup) {
+                        popup.revalidate();
+                        popup.repaint();
+                    }
+                });
             }
             @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent 
e) {}
             @Override public void popupMenuCanceled(PopupMenuEvent e) {}

Reply via email to