¿Cómo puedo cambiar el tamaño del fondo de un JLabel o aplicar bordes superior e inferior solamente?

StackOverflow https://stackoverflow.com/questions/1688902

  •  18-09-2019
  •  | 
  •  

Pregunta

Tengo algo que se parece a esto:

text alt

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);
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top