Füllen Sie die Beschriftungen mit Unicode-Zeichen

Wie fülle ich Unicode-Zeichen in Swing-Labels ein?

Ich versuche, eine Benutzeroberfläche für das Schachprogramm zu erstellen, das ich kürzlich programmiert habe (mit Schachfiguren wie oben). Darin verwende ich Unicode-Zeichen, um meine Schachfiguren darzustellen (\u2654 durch\u265F).

Das Problem ist wie folgt:

Wenn ich den Hintergrund meiner Schachfigur festlegeJLabel Bei etwas wie Weiß wird das gesamte Etikett ausgefüllt (in meinem Fall handelt es sich um ein 50 × 50 Pixel großes weißes Quadrat mit dem Zeichen oben). Dies führt dazu, dass meine Teile wie Kacheln aussehen und nicht nur wie Bilder.

Wenn ich das Etikett auf undurchsichtig stelle, erhalte ich nur eine Ausstechversion meiner Schachfigur, nicht eine mit gefüllten Innenseiten. Z.B.

Gibt es eine Möglichkeit, nur das Zeichen zu füllen?

Wenn nicht, mache ich wohl ein Sprite Sheet, aber das gefällt mir, weil ich die Schachfiguren verwenden kann.toString() Methoden für die Etiketten.

Code
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);
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage