Como posso redimensionar o fundo de um JLabel ou aplicar superior e apenas bordas inferiores?

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu tenho algo parecido com isto:

text alt

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top