View Full Version : [java] jtextpane e artefatti grafici (z-order)
bertoz85
03-01-2007, 16:32
In un applet ho 2 JPanel, uno sopra l'altro, e in quello sotto ho delle JLabel e JTextPane.
Il problema è che il cursore lampeggiante delle JTextPane viene visualizzato comunque anche se il JTextPane è coperto dall'altro pannello. Se poi scrivo, compaiono i caratteri.
Inoltre certe volte viene visualizzato il textpane completo, come se fosse nel pannello davanti. (usando setEnabled(false) non funziona)
E altre volte ci sono degli artefatti grafici.
Ho usato solo componenti base di java senza derivare
Allego anche un'immagine cosi vi fate un'idea. le textbox che vedete son nel pannello sottostante color azzurro, quella in basso è disabilitata.
ciao e grazie
La butto lì, devi proibire ai componenti sotto di fare un paintComponent(g)
Questo metodo viene lanciato automaticamente quando il componente ha bisogno di essere ridisegnato, credo che quando scriv in una textbox questa viene ridisegnata.
Prova a fare una classe derivata da JTextPane e sovrascrivere il metodo protected void paintComponent(g) così:
protected void paintComponent(g){
if(!coperto) super.paintComponent(g);
}
La variabile coperto la imposti tu con un metodo del tipo:
public void copri(){
this.coperto=true;
}
Comunque prima di fare tutto ciò controlla bene di avere fatto le cose per bene, e magari dai un occhio al JLayeredPane che permette appunto di avere i componenti sovrapposti.
edit: ti ho aiutato nonostanto ciò che dice la tua firma non sta ne in cielo ne in terra... :rolleyes:
bertoz85
03-01-2007, 17:33
La butto lì, devi proibire ai componenti sotto di fare un paintComponent(g)
Questo metodo viene lanciato automaticamente quando il componente ha bisogno di essere ridisegnato, credo che quando scriv in una textbox questa viene ridisegnata.
Prova a fare una classe derivata da JTextPane e sovrascrivere il metodo protected void paintComponent(g) così:
protected void paintComponent(g){
if(!coperto) super.paintComponent(g);
}
La variabile coperto la imposti tu con un metodo del tipo:
public void copri(){
this.coperto=true;
}
Comunque prima di fare tutto ciò controlla bene di avere fatto le cose per bene, e magari dai un occhio al JLayeredPane che permette appunto di avere i componenti sovrapposti.
grazie....
cmq, non so, già non capisco perchè le textfield devono sforare nel pannell di sopra essendo in quello di sotto... mi sembra piu un problema di swing piu che mio.
è come se piazzo una finestra sopra a un'altra co un textbox, e nella prima finestra compare un textbox (e in tal caso sarebbe una svista enorme dei programmatori ddi windows)
tantopiù che il pannello sopra lo metto li usando setComponentZOrder... quindi non ha scuse
EDIT: se vuoi posto il codice sorgente delle parti interessate
edit: ti ho aiutato nonostanto ciò che dice la tua firma non sta ne in cielo ne in terra... :rolleyes:che c'entra? le mie idee politiche non sono in discussione
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.