Creare bordo a JLabel

di il
1 risposte

Creare bordo a JLabel

etichetta_nome_utente.setBorder(new JButton().getBorder());
Non funziona. Il codice l'ho messo in initComponents dopo questo codice
etichetta_nome_utente = new javax.swing.JLabel();
Perché non funziona? Grazie.

1 Risposte

  • Re: Creare bordo a JLabel

    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.
Devi accedere o registrarti per scrivere nel forum
1 risposte