JComboBox change drop-down popup

橙三吉。 提交于 2019-11-28 00:19:42

Try the setPopupAbove() method found in Combo Box Popup.

On my system, a JComboBox will open upwards if it is near the bottom of the screen and there is not enough space to open it downwards. (Is that what you meant?)

Given that fact, I doubt it would be easy to alter the defined behavior.

On Mac OS X, I get the following exception. Apparently, com.apple.laf.AquaComboBoxRenderer is not a subclass of BasicComboBoxRenderer.

Addendum: The ClassCastException is gone, and a screen capture of "EDIT 2nd. Code for MacOX" appears below:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
    com.apple.laf.AquaComboBoxRenderer cannot be cast to
    javax.swing.plaf.basic.BasicComboBoxRenderer
  at HighRowCombo.makeUI(HighRowCombo.java:26)
  at HighRowCombo$1.run(HighRowCombo.java:13)
  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:678)
  at java.awt.EventQueue.access$000(EventQueue.java:86)
  at java.awt.EventQueue$1.run(EventQueue.java:639)
  at java.awt.EventQueue$1.run(EventQueue.java:637)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
  at java.awt.EventQueue.dispatchEvent(EventQueue.java:648)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
  at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
package com.example.swing;

import javax.swing.JList;
import javax.swing.ListCellRenderer;
import java.awt.Component;
import java.awt.Dimension;

public class PaddingListCellRenderer<Type> implements ListCellRenderer<Type> {
    private final ListCellRenderer original;
    private final int hpadding;
    private final int vpadding;

    public PaddingListCellRenderer(ListCellRenderer original, int hpadding, int vpadding) {
        this.original = original;
        this.hpadding = hpadding;
        this.vpadding = vpadding;
    }

    @Override
    @SuppressWarnings("unchecked")
    public Component getListCellRendererComponent(JList<? extends Type> list, Type value, int index, boolean isSelected, boolean cellHasFocus) {
        final Component component = original.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        component.setPreferredSize(null);
        final Dimension pref = component.getPreferredSize();
        component.setPreferredSize(new Dimension(pref.width + 2 * hpadding, pref.height + 2 * vpadding));
        return component;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!