我编写了自己的ListCellRenderer(下面的代码),它使我的单元格透明。 现在如果我运行这个,每次点击一个listitem,它就变得比以前更白了。可能是,JList总是添加这个新的JLabel - 我创建的 - 并覆盖了最后一个?
jListPriority.setOpaque(true);
jListPriority.setBackground(new Color(255, 255, 255, 10));
jListPriority.setBorder(BorderFactory.createLineBorder(new Color(250, 250, 250)));
jListPriority.setCellRenderer(new ListCellRenderer() {
private JLabel label = new JLabel();
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
label.setOpaque(true);
label.setText(value.toString());
label.setForeground(new Color(250, 250, 250));
label.setFont(new Font("Lucida Grande", Font.PLAIN, 13));
label.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(250, 250, 250, 50)));
label.setPreferredSize(new Dimension(label.getPreferredSize().width, label.getPreferredSize().height + 3));
if (isSelected) {
label.setBackground(new Color(255, 255, 255, 20));
} else {
label.setBackground(new Color(255, 255, 255, 10));
}
return label;
}
});
答案 0 :(得分:3)
Graphics2D
的默认复合使用AlphaComposite.SRC_OVER
规则,因此预期结果。您需要为所需效果指定合适的模式。您可以从example获得一些想法。
答案 1 :(得分:3)
我认为你不想创建太多的jlabel实例。在您的示例中,每次调用get ...方法创建一个jlabel实例只需将变量标签转换为字段即可。