[英]Wrong background colors in Swing ListCellRenderer
我目前正在尝试为JList
编写自定义ListCellRenderer
。 不幸的是,几乎所有的例子DefaultListCellRenderer
使用DefaultListCellRenderer
作为JLabel
并完成它; 然而,我需要一个JPanel
(因为我需要显示一些信息,而不仅仅是一个图标和一行文本)。
现在我的背景颜色有问题,特别是Nimbus PLAF。 我从list.getBackground()
看到的背景颜色看起来是白色的,但是涂成灰色(或蓝灰色)。 输出我得到的颜色产生以下结果:
背景颜色:DerivedColor(颜色= 255,255,255 parent = nimbusLightBackground偏移= 0.0,0.0,0.0,0 pColor = 255,255,255
但是,可以看出,这不是画的内容。
它显然适用于所选项目。 目前我甚至将我放入JPanel
的每个组件都将单元格渲染器返回设置为不透明并且具有正确的前景色和背景色 - 无济于事。
我在这里做错了什么想法?
ETA:希望运行的示例代码。
public class ParameterListCellRenderer implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// some values we need
Border border = null;
Color foreground, background;
if (isSelected) {
background = list.getSelectionBackground();
foreground = list.getSelectionForeground();
} else {
background = list.getBackground();
foreground = list.getForeground();
}
if (cellHasFocus) {
if (isSelected) {
border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
}
if (border == null) {
border = UIManager.getBorder("List.focusCellHighlightBorder");
}
} else {
border = UIManager.getBorder("List.cellNoFocusBorder");
}
System.out.println("Background color: " + background.toString());
JPanel outerPanel = new JPanel(new BorderLayout());
setProperties(outerPanel, foreground, background);
outerPanel.setBorder(border);
JLabel nameLabel = new JLabel("Factory name here");
setProperties(nameLabel, foreground, background);
outerPanel.add(nameLabel, BorderLayout.PAGE_START);
Box innerPanel = new Box(BoxLayout.PAGE_AXIS);
setProperties(innerPanel, foreground, background);
innerPanel.setAlignmentX(Box.LEFT_ALIGNMENT);
innerPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
JLabel label = new JLabel("param: value");
label.setFont(label.getFont().deriveFont(
AffineTransform.getScaleInstance(0.95, 0.95)));
setProperties(label, foreground, background);
innerPanel.add(label);
outerPanel.add(innerPanel, BorderLayout.CENTER);
return outerPanel;
}
private void setProperties(JComponent component, Color foreground,
Color background) {
component.setOpaque(true);
component.setForeground(foreground);
component.setBackground(background);
}
}
奇怪的是,如果我这样做的话
if (isSelected) {
background = new Color(list.getSelectionBackground().getRGB());
foreground = new Color(list.getSelectionForeground().getRGB());
} else {
background = new Color(list.getBackground().getRGB());
foreground = new Color(list.getForeground().getRGB());
}
它神奇地起作用。 所以,也许DerivedColor
与nimbusLightBackground
我越来越有可能会遇到麻烦?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.