Search code examples
javaswinglook-and-feeljcomboboxsynth

How can I change the arrow style in a JComboBox


Let's say I want to use a custom image for the arrow in JComboBox, how can I do this?

I understand it's possible using the synth xml files, or maybe even UIManager.put(...), but I don't know how. All I want to do at this time is change the arrow image to something else, either programatically or even just overriding the image it uses. How exactly can I do this?


Solution

  • You can override createArrowButton() in BasicComboBoxUI. BasicArrowButton is a convenient starting point.

    class ColorArrowUI extends BasicComboBoxUI {
    
        public static ComboBoxUI createUI(JComponent c) {
            return new ColorArrowUI();
        }
    
        @Override protected JButton createArrowButton() {
            return new BasicArrowButton(
                BasicArrowButton.SOUTH,
                Color.cyan, Color.magenta,
                Color.yellow, Color.blue);
        }
    }
    

    Then install it.

    JComboBox combo = new JComboBox();
    combo.setUI(ColorArrowUI.createUI(combo));