package com.hearthsim.gui; import javax.swing.*; import javax.swing.plaf.basic.BasicComboBoxUI; import java.awt.*; import java.awt.geom.Rectangle2D; public class HSHeroChoiceComboBox extends JComboBox<String> { private static final long serialVersionUID = 1L; Dimension arc_ = new Dimension(2, 2); public class HSHeroChoiceRenderer extends JLabel implements ListCellRenderer<String> { private static final long serialVersionUID = 1L; public HSHeroChoiceRenderer() { setOpaque(true); setHorizontalAlignment(CENTER); setVerticalAlignment(CENTER); } @Override public Component getListCellRendererComponent( JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) { this.setText(value); this.setForeground(HSColors.TEXT_COLOR); if (isSelected) { this.setBackground(HSColors.BACKGROUND_COLOR); } else { this.setBackground(HSColors.LIGHTER_BACKGROUND_COLOR); } return this; } } class HSHeroChoice extends BasicComboBoxUI { @Override protected JButton createArrowButton() { JButton toRet = new HSArrowButton(HSArrowButton.DOWN); toRet.setBackground(HSColors.LIGHTER_BACKGROUND_COLOR); toRet.setForeground(HSColors.TEXT_COLOR); return toRet; } } public HSHeroChoiceComboBox(String[] items) { super(items); this.setRenderer(new HSHeroChoiceRenderer()); this.setMaximumRowCount(10); this.setBackground(HSColors.LIGHTER_BACKGROUND_COLOR); this.setForeground(HSColors.TEXT_COLOR); this.setUI(new HSHeroChoice()); } @Override public void paintComponent(Graphics g) { Graphics2D antiAlias = (Graphics2D)g; antiAlias.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(HSColors.LIGHTER_BACKGROUND_COLOR); g.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, arc_.width, arc_.height); g.setColor(HSColors.TEXT_COLOR); g.setFont(this.getFont()); FontMetrics fm = g.getFontMetrics(); Rectangle2D r = fm.getStringBounds((String)this.getSelectedItem(), antiAlias); g.drawString((String)this.getSelectedItem(), 10, (getHeight() - (int) r.getHeight()) / 2 + fm.getAscent()); } }