【发布时间】:2018-12-10 15:08:36
【问题描述】:
我正在尝试删除(或只是设置为不可见)我的 JList 的背景和边框。
当我在其上设置透明颜色时,我的 JList 背景保持白色。
这是我的自定义 jcombox 渲染器类:
package Utils.UI.CustomeComboBox;
import Parameter.Model.ThemeEnum;
import Repository.Parameter.ThemeParameterRepository;
import Utils.UI.FileGetter;
import Utils.UI.Utils;
import javax.swing.*;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import java.awt.*;
public class CustomComboBoxRenderer extends BasicComboBoxRenderer {
private Image backgroundImage;
private Font font;
private final static int WIDTH = 190;
private final static int HEIGHT = 49;
public CustomComboBoxRenderer() {
super();
this.setOpaque(false);
this.setHorizontalTextPosition(AbstractButton.CENTER);
this.setVerticalAlignment(AbstractButton.CENTER);
this.setPreferredSize(new Dimension(CustomComboBoxRenderer.WIDTH, CustomComboBoxRenderer.HEIGHT));
this.font = FileGetter.getFont().deriveFont(Utils.DEFAULT_SIZE_BUTTON_TEXT);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
list.setOpaque(false);
list.setBackground(new Color(255, 0, 0, 0));
list.setBorder(BorderFactory.createEmptyBorder());
if (index == -1 || isSelected) {
this.backgroundImage = FileGetter.getImage("_button13.png");
} else {
this.backgroundImage = FileGetter.getImage("_button02.png");
}
return this;
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
// background image
g2d.drawImage(this.backgroundImage, 0, 0, this);
// text
g2d.setFont(this.font);
g2d.setColor((Color) ThemeParameterRepository.getColor(ThemeEnum.SECOND_COLOR).getValue());
FontMetrics fontMetrics = g.getFontMetrics(this.font);
g2d.drawString(
this.getText(),
(CustomComboBoxRenderer.WIDTH - fontMetrics.stringWidth(this.getText())) / 2,
((CustomComboBoxRenderer.HEIGHT - fontMetrics.getHeight()) / 2) + fontMetrics.getAscent()
);
g2d.finalize();
}
}
我尝试将setOpaque(false) 和setBackground(new Color(255, 0, 0, 0)) 放在每个组件上,但没有得到好的结果。
一种解决方案是调整列表内的图像大小,但我的图像不是矩形,因此列表背景的角是可见的。
【问题讨论】:
标签: java swing jlist paintcomponent jcomponent