1 回答
TA贡献1871条经验 获得超13个赞
Combobox 不是仅用于背景和前景的组件,而是复杂的组件。示例:JComboBox 的组成为:
箭头按钮
推力一览表
边框(它有颜色)
所选项目
因此,要进行更改,您可以在 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是开发人员分支,包含更多修复和测试。
图书馆的一个例子是
添加回答
举报