package net.filebot.ui.subtitle;
import static javax.swing.BorderFactory.*;
import java.awt.Color;
import java.awt.Rectangle;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.plaf.basic.BasicComboBoxUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
public class SimpleComboBox extends JComboBox {
public SimpleComboBox(Icon dropDownArrowIcon) {
setUI(new SimpleComboBoxUI(dropDownArrowIcon));
setBorder(createEmptyBorder());
}
private static class SimpleComboBoxUI extends BasicComboBoxUI {
private final Icon dropDownArrowIcon;
public SimpleComboBoxUI(Icon dropDownArrowIcon) {
this.dropDownArrowIcon = dropDownArrowIcon;
}
@Override
protected JButton createArrowButton() {
JButton button = new JButton(dropDownArrowIcon);
button.setContentAreaFilled(false);
button.setBorderPainted(false);
button.setFocusPainted(false);
button.setOpaque(false);
return button;
}
@Override
protected ComboPopup createPopup() {
return new BasicComboPopup(comboBox) {
@Override
protected Rectangle computePopupBounds(int px, int py, int pw, int ph) {
Rectangle bounds = super.computePopupBounds(px, py, pw, ph);
// allow combobox popup to be wider than the combobox itself
bounds.width = Math.max(bounds.width, list.getPreferredSize().width);
return bounds;
}
@Override
protected void configurePopup() {
super.configurePopup();
setOpaque(true);
list.setBackground(Color.white);
setBackground(Color.white);
// use gray instead of black border for combobox popup
setBorder(createCompoundBorder(createLineBorder(Color.gray, 1), createEmptyBorder(1, 1, 1, 1)));
}
};
}
}
}