p0ll0_ ha scritto:
Perché non funziona?
Perché il Border applicato per default a JButton è dato dal Look&Feel ed è "speciale" nel senso che ci sono dei test per verificare che sia usato solo con dei button.
Con il L&F "Metal" (quello predefinito) il Border applicato a JButton risulta un javax.swing.plaf.BorderUIResource$CompoundBorderUIResource. Un "compound" border incapsula 2 bordi innestati, che in questo caso sono:
- javax.swing.plaf.BorderUIResource$CompoundBorderUIResource
- javax.swing.plaf.metal.MetalBorders$ButtonBorder
Il MetalBorders$ButtonBorder è quello che materialmente mostra il bordino da "pulsante". Se tu guardassi il suo sorgente vedresti:
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
if (!(c instanceof AbstractButton)) {
return;
}
// ....
Quindi, con
quel test lì all'inizio, secondo te funziona con le label? o con i textfield? La risposta è semplice/ovvia:
NO.
Pertanto, se vuoi creare un Border per JLabel, puoi benissimo farlo, ci sono tutte le classi apposite:
- le classi concrete in javax.swing.border (es. BevelBorder, LineBorder, ecc...)
- i metodi "factory" statici in javax.swing.BorderFactory
- dei Border "custom" (tipicamente estendendo AbstractBorder)
Ma non puoi usare per JLabel lo stesso Border applicato per default a JButton, perché appunto è specifico/speciale solo per i button.