Como posso redimensionar o fundo de um JLabel ou aplicar superior e apenas bordas inferiores?
Pergunta
Eu tenho algo parecido com isto:
Como você pode ver, "Blambo" é um JLabel com um opaco, fundo vermelho. O rótulo fica no topo de uma pequena barra cinza que tem uma margem simples enegrecida de pixel a toda a volta dele. Eu gostaria de minha aviso vermelho para combinar com o bar que está sentado no mais bem, ou seja, eu nem preciso torná-lo duas pixels menor e movê-lo para baixo um pixel ou eu preciso aplicar a mesma borda único pixel para apenas a parte superior e inferior. Desses dois, o primeiro é provavelmente preferível como este pedaço de código é compartilhado com outros rótulos.
O código em questão:
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);
Essa fronteira é definida assim:
public static Border border_left_margin = new EmptyBorder(0,6,0,0);
Solução
Você pode criar uma nova fronteira para a etiqueta como esta:
EDIT:. Depois de ver o seu comentário em outra resposta que eu criei uma borda composto que dá o que você quer
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);
}
}
Outras dicas
Sem ver seu código, é difícil saber o que você já sabe ou ter tentado.
Você define explicitamente a fronteira de um componente assim:
myLabel.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));
Agora, JLabels são bastante animais complicado, com um monte de código para medir o seu ícone (opcional), e planear o seu layout em torno de lotes de casos gerais. Você pode ser melhor fora subclasse JComponent para escrever seu próprio selo, muito simples.