Вы даете JLabel фон, который является полупрозрачным, но вы указали, что он непрозрачный. Это означает, что Swing не будет рисовать компоненты под ним, пока не предоставит JLabel объект Graphics, который будет использоваться для рисования. Предоставленная Графика содержит мусор, который он ожидает, что JLabel перезапишет, когда это рисует его фон. Однако, когда он рисует фон, он полупрозрачен, поэтому мусор остается.
Чтобы устранить проблему, вам нужно создать расширение JLabel, которое не будет непрозрачным, но имеет переопределенный метод paintComponent, который будет рисовать нужный фон.
РЕДАКТИРОВАТЬ: Вот пример:
public class TranslucentLabel extends JLabel {
public TranslucentLabel(String text) {
super(text);
setOpaque(false);
}
@Override
protected void paintComponent(Graphics graphics) {
graphics.setColor(getBackground());
graphics.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(graphics);
}
}