Как "заполнить" символы Unicode в ярлыках в 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);
}
}