¿Cómo puedo cambiar el tamaño del fondo de un JLabel o aplicar bordes superior e inferior solamente?
Pregunta
Tengo algo que se parece a esto:
Como se puede ver, "Blambo" es un JLabel con un fondo opaco, de color rojo. La etiqueta se encuentra en la parte superior de una pequeña barra gris que tiene un solo píxel frontera negruzca todo el camino alrededor de ella. Me gustaría que mi advertencia de color rojo para que coincida con la barra que está sentado en más bien, es decir, que sea necesario para que sea dos píxeles más corto y moverlo hacia abajo un píxel o tengo que aplicar el mismo borde único píxel a la parte superior e inferior solamente. De los dos, el primero es probablemente preferible ya que esta pieza de código se comparte con otras etiquetas.
El código en cuestión:
bgColor = Color.red;
textColor = Color.white;
setBackground(bgColor);
setOpaque(true);
// This line merely adds some padding on the left
setBorder(Global.border_left_margin);
setForeground(textColor);
setFont(font);
super.paint(g);
Esa frontera se define así:
public static Border border_left_margin = new EmptyBorder(0,6,0,0);
Solución
Puede crear una nueva frontera para la etiqueta de la siguiente manera:
EDIT:. Después de ver su comentario en otra respuesta que he creado una frontera compuesto que le da lo que quiere
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;
/**
* @author Savvas Dalkitsis
*/
public class Test1 {
public static void main(String[] args) {
JFrame f = new JFrame("Test");
JLabel c = new JLabel("Hello");
Border b = BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(2, 0, 2, 0, Color.black),
BorderFactory.createEmptyBorder(0, 100, 0, 0));
c.setBorder(b);
f.getContentPane().add(c);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
Otros consejos
Sin ver su código, es difícil saber lo que ya sabe o ha intentado.
Se establece explícitamente la frontera de un componente de esta manera:
myLabel.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));
Ahora, JLabels son bastante complicados bestias, con una gran cantidad de código para medir su icono (opcional), y la planificación de su trazado en torno a una gran cantidad de casos generales. Usted puede ser mejor como subclase JComponent para escribir su propio sello, muy simple.