„Wypełnij” znaki Unicode w etykietach

Jak „wypełnić” znaki Unicode w etykietach w Swing?

Próbuję stworzyć interfejs użytkownika dla programu szachowego, który ostatnio zaprogramowałem (z kawałkami szachów podobnymi do powyższych). Używam znaków Unicode do reprezentowania moich figur szachowych (\u2654 przez\u265F).

Problem jest następujący:

Kiedy ustawiłem tło mojej szachowej częściJLabel do czegoś takiego jak biała, cała etykieta jest wypełniona (w moim przypadku jest to kwadrat biały 50 * 50px z postacią na górze). Prowadzi to do tego, że moje fragmenty wyglądają jak kafelki, a nie tylko zdjęcia.

Kiedy ustawiam etykietę na nieprzezroczystą, otrzymuję po prostu wersję mojego szachulcowego noża do ciastek, a nie jedną z wypełnionymi wnętrzami. NA PRZYKŁAD.

Czy istnieje sposób na wypełnienie tylko postaci?

Jeśli nie, zgaduję, że zrobię arkusz sprite'a, ale podoba mi się to, ponieważ mogę użyć szachy.toString() metody etykiet.

Kod
import java.awt.*;
import javax.swing.*;
import java.util.Random;

class ChessBoard {

    static Font font = new Font("Sans-Serif", Font.PLAIN, 50);
    static Random rnd = new Random();

    public static void addUnicodeCharToContainer(
        String s, Container c, boolean randomColor) {

        JLabel l = new JLabel(s);
        l.setFont(font);
        if (randomColor) {
            int r = rnd.nextInt(255);
            int g = rnd.nextInt(255);
            int b = rnd.nextInt(255);

            l.setForeground(new Color(r,g,b));
            l.setBackground(new Color(255-r,255-g,255-b));
            l.setOpaque(true);
        }
        c.add(l);
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new GridLayout(0,6,4,4));

                String[] pieces = {
                    "\u2654","\u2655","\u2656","\u2657","\u2658","\u2659",
                    "\u265A","\u265B","\u265C","\u265D","\u265E","\u265F"
                };

                for (String piece : pieces) {
                    addUnicodeCharToContainer(piece,gui,false);
                }
                for (String piece : pieces) {
                    addUnicodeCharToContainer(piece,gui,true);
                }

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

questionAnswers(3)

yourAnswerToTheQuestion