嗨!
我想知道如何更改默认的聚焦背景和前景 JComboBox
. 因为我做了一个 DefaultListCellRenderer
,这是修改前景和背景的每一个项目,我不喜欢它不尊重他们时,它获得重点。我试过了 UIMnager.put("ComboBox.background", new ColorUIResource(my_color));
还有一些其他的钥匙(实际上我能找到的每一把)作为第一件事 SwingUtilities
没有成功。我没有做任何改变 UIManager
在这个程序中,既不在前也不在后,因此外观是默认的(metal),正如java13最初提供的那样。有办法吗?
编辑:下面是一个示例来了解我的意思:
package tests;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
final class ComboBoxTest implements Runnable {
public static void main(String[]arguments_) {
SwingUtilities.invokeLater(new ComboBoxTest());
}
@Override
public void run() {
JFrame frame_ = new JFrame("JComboBox Test");
JPanel panel_ = new JPanel(new GridLayout(3, 1));
JComboBox<String>
useless_box = new JComboBox<>()
, tested_box = new JComboBox<>(new String[] {
"<html>⛈</html>", "<html>☠</html>"
});
tested_box.setBackground(Color.ORANGE);
tested_box.setForeground(Color.RED.darker().darker());
tested_box.setFont(tested_box.getFont().deriveFont(48.f));
tested_box.setRenderer(new ComboRenderer());
panel_.add(new JPanel());
panel_.add(useless_box);
panel_.add(tested_box);
frame_.add(panel_);
frame_.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame_.setLocationRelativeTo(null);
frame_.pack();
frame_.setVisible(true);
}
private class ComboRenderer extends DefaultListCellRenderer {
/**
*
*/
private static final long serialVersionUID = -1329981614961331328L;
@Override
public Component getListCellRendererComponent (
JList<? extends Object>list_, Object value_
, int index_, boolean is_selected, boolean cell_has_focus
) {
super.getListCellRendererComponent (
list_, value_, index_, is_selected, cell_has_focus
);
setHorizontalAlignment(DefaultListCellRenderer.CENTER);
switch(index_) {
case -1:
setBackground(Color.ORANGE);
break;
default:
if(is_selected == true) {
setBackground(Color.ORANGE.darker());
} else {
setBackground(Color.ORANGE);
}
break;
}
setForeground(Color.RED.darker().darker());
return this;
}
}
}
第一个盒子(中间)和 JPanel
(在顶部)来看看当第二个获得焦点或失去焦点,转移焦点或不完全转移焦点时会发生什么 JPanel
而不是 JComboBox
自身或其他可选择的 JComponent
).
1条答案
按热度按时间ozxc1zmp1#
我不喜欢当它获得焦点时它不尊重他们。
如果您说您不喜欢组合框获得焦点时的蓝色选择背景色,则可以使用:
这可能对某些laf有效。但它将应用于应用程序中的所有组合框。
如果只需要一个组合框,那么就需要编写一个自定义的comboboxui。我不知道需要重写哪些方法,但是可以在源代码中搜索“selectionbackground”来查看如何使用该属性。