'Rellenar' caracteres Unicode en las etiquetas
¿Cómo 'rellenar' los caracteres Unicode en las etiquetas en Swing?
Estoy tratando de hacer una interfaz de usuario para el programa de ajedrez que he programado recientemente (con piezas de ajedrez algo como se ve arriba). En él estoy usando caracteres Unicode para representar mis piezas de ajedrez (\u2654
mediante\u265F
).
El problema es el siguiente:
Cuando establezco el fondo de mi pieza de ajedrez.JLabel
para algo como el blanco, toda la etiqueta está llena (en mi caso es un cuadrado de 50 * 50px de blanco con el carácter en la parte superior). Esto lleva a que mis piezas se vean como azulejos en lugar de solo sus cuadros.
Cuando configuro la etiqueta como opaca, solo obtengo una versión de corte de galletas de mi pieza de ajedrez, no una con el interior lleno. P.EJ.
¿Hay una manera de llenar solo el personaje?
Si no, creo que haré una hoja de sprites, pero me gusta esto porque puedo usar las piezas de ajedrez.toString()
Métodos para las etiquetas.
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);
}
}