«Заполнить» символы Юникода в метках

Как «заполнить» символы Юникода в метках в Swing?

Я пытаюсь создать пользовательский интерфейс для шахматной программы, которую я недавно запрограммировал (с шахматными фигурами, как показано выше). В нем я использую символы юникода для представления своих шахматных фигур (\u2654 через\u265F).

Проблема заключается в следующем:

Когда я устанавливаю фон моей шахматной фигурыJLabel что-то вроде белого, вся метка заполнена (в моем случае это квадрат белого цвета размером 50 * 50 пикселей с символом сверху). Это приводит к тому, что мои произведения выглядят как плитки, а не просто как их картинки.

Когда я устанавливаю метку непрозрачной, я просто получаю версию шахматной фигуры для печенья, а не ту, с заполненными внутренностями. НАПРИМЕР.

Есть ли способ заполнить только символ?

Если нет, думаю, я сделаю спрайт, но мне это нравится, потому что я могу использовать шахматные фигуры.toString() методы для меток.

Код
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);
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос