Come faccio a ridimensionare lo sfondo di un JLabel o applicare solo i bordi superiore e inferiore?

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

  •  18-09-2019
  •  | 
  •  

Domanda

ho qualcosa che assomiglia a questo:

alt text

Come si può vedere, "Blambo" è un JLabel con una, sfondo rosso opaco. L'etichetta si trova sulla cima di una piccola barra grigia che ha un singolo pixel confine nerastro tutto intorno esso. Vorrei che il mio allarme rosso per abbinare il bar è seduto su più bene, vale a dire ho neanche bisogno di fare esso due pixel più breve e spostarlo verso il basso di un pixel o ho bisogno di applicare lo stesso confine singolo pixel alla parte superiore e inferiore solo. Di questi due, il primo è probabilmente preferibile come questo pezzo di codice è condiviso con altre etichette.

Il codice in questione:

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);

Questo confine è definito nel seguente modo:

public static Border border_left_margin = new EmptyBorder(0,6,0,0);
È stato utile?

Soluzione

È possibile creare una nuova frontiera per l'etichetta in questo modo:

EDIT:. Dopo aver visto il tuo commento in un'altra risposta ho creato un bordo composto che ti dà quello che vuoi

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);
    }

}

Altri suggerimenti

Senza vedere il codice, è difficile sapere ciò che già sapete o avete provato.

È esplicitamente impostare il bordo di un componente in questo modo:

myLabel.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));

Ora, JLabels sono piuttosto complicati bestie, con un sacco di codice per misurare la sua icona (opzionale), e pianificare il suo layout in giro un sacco di casi generali. Si potrebbe essere meglio sottoclasse JComponent di scrivere il proprio marchio, molto semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top