Come faccio a ridimensionare lo sfondo di un JLabel o applicare solo i bordi superiore e inferiore?
Domanda
ho qualcosa che assomiglia a questo:
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);
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.