Combobox не является компонентом только для фона и переднего плана, но является сложным компонентом. Пример: JComboBox состоит из:
- ArrowButton
- Список элементов
- Граница (и она имеет цвет)
- выбранный элемент
Таким образом, для изменения всего, что вы можете добавить в свой UIManager, все константы или вы можете определить новый UIComponent.
Таким образом, PersonalComboBoxUI может выполнять следующие действия:
/**
* @contributor https://github.com/vincenzopalazzo
*/
public class PersonalComboBoxUI extends BasicComboBoxUI {
public static ComponentUI createUI (JComponent c) {
return new PersonalComboBoxUI ();
}
@Override
public void installUI (JComponent c) {
super.installUI (c);
JComboBox<?> comboBox = (JComboBox<?>) c;
comboBox.setBackground (UIManager.getColor ("ComboBox.background"));
comboBox.setForeground (UIManager.getColor ("ComboBox.foreground"));
comboBox.setBorder (UIManager.getBorder ("ComboBox.border"));
comboBox.setLightWeightPopupEnabled (true);
}
@Override
protected JButton createArrowButton () {
Icon icon = UIManager.getIcon ("ComboBox.buttonIcon");
JButton button;
if (icon != null) {
button = new JButton (icon);
}
else {
button = new BasicArrowButton (SwingConstants.SOUTH);
}
button.setOpaque (true);
button.setBackground (UIManager.getColor ("ComboBox.buttonBackground"));
button.setBorder (BorderFactory.createLineBorder(Color.black));
return button;
}
@Override
protected ListCellRenderer createRenderer() {
return new MaterialComboBoxRenderer();
}
}
Вы должны быть определены также PersonalComboBoxRenderer
/**
* @contributor https://github.com/vincenzopalazzo
*/
public class PersonalComboBoxRenderer extends BasicComboBoxRenderer {
@Override
public Component getListCellRendererComponent (JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JComponent component = (JComponent) super.getListCellRendererComponent (list, value, index, isSelected, cellHasFocus);
component.setBorder (BorderFactory.createEmptyBorder (5, 5, 5, 5));
component.setForeground (UIManager.getColor ("ComboBox.foreground"));
component.setBackground (isSelected || cellHasFocus ?
UIManager.getColor("ComboBox.selectedInDropDownBackground") :
UIManager.getColor("ComboBox.background"));
return component;
}
}
ps: в этом случае я использую UIManager.put ("ComboBox.background", COLOR) для добавления истратификация внутри JComponent.
Поэтому я хочу добавить две информации относительно того, используете ли вы персональный цвет внутри UIManager или PersonalComboBoxUI, цвет должен быть определен с помощью этого кода
Color PINK_400 = new ColorUIResource (236, 64, 122);
, потому что когдаВы идете, чтобы удалить внешний вид, и цвет не может быть удален, но если вы использовали ColorUIResource , внешний вид и внешний вид должны быть удалены правильно.
Для завершения, если вам не нужны настройки по умолчаниюпосмотри ичувствую, я хочу предложить вам использовать библиотеку.
material-UI-swing имеет системную тематику для создания персонального времени в вашем приложении, и вся тема персонализирована.
Это репо vincenzoapalazzo / material-ui-swing и atarw / material-ui-swing являются одним и тем же хранилищем и одним и тем же разработчиком, так что vincenzopalazzo/ material-us-swing - это ветка разработчика, содержащая дополнительные исправления и тесты.
Пример библиотеки:
.
Ps: Я - дизайнер MaterialTheming System .