Newsgroup: it.comp.java
Titolo: JLabel e proprietà comuni

Salve, mi sono trovato di fronte ad un dubbio.
Ho costruito un jframe contenente diverse jlabel che devono avere tutte le
stesse proprietà (font, foreground, background, ecc...) tranne la text
ovviamente.
Per semplicità, ed anche perché non mi serve conservare il riferimento
all'oggetto jlabel scrivo semplicemente:
panel.add(new JLabel("label1"));
ma in questo modo non posso settare le proprietà, e sono costretto quindi a
fare:
JLabel label = new JLabel("label1"));
label.setForeGround(...);
label.setBackGround(...);
label.setFont(...);
panel.add(label);
aumentando in maniera notevole la complessità del codice.
Ora ricordo che da qualche parte lessi che si poteva settare uno stile unico
che raggruppasse tutte le proprietà, e tutti gli oggetti che venivano
creati successivamente adottavano quell'insieme di proprietà, il che
farebbe al caso mio, soltanto che non ricordo come si chiamavano queste
classi e non ricordo dove lo lessi!
Spero di non aver detto una baggianata e ringrazio anticipatamente qualcuno
che mi risponda.
Ciao

]NEO[ ha scritto:

potresti creare un metodo createLabel che inizializza la label e ne 
imposta le proprietà

 imposta le proprietà
Si, potrebbe essere una soluzione, ed è anche molto semplice, non c'avevo
pensato.
Comunque ricordo che era possibile impostare uno stile comune che avrebbero
adottato tutti i componenti successivamente inizializzati, ora sono
comunque interessato a quest'aspetto.
Grazie.

...

forse ti fiferischi al LookAndFeel ?
comunque la semplice idea di creare un metodo creaLabel è la migliore.
compuque JLabel è clonable, e quindi puoi provare anche con il metodo
clone() (deriva dalla classe object)

 clone() (deriva dalla classe object)
No, non parlo del look and feel.
Ti spiego:
Mi riferisco a questa classe misteriosa chiamandola ad esempio Modello.
Creo una JLabel, imposto un font, imposto il colore, l'eventuale opacità,
ecc...
Creo un'altra JLabel, ovviamente devo reimpostare tutte le proprietà da
zero.
Qui mi viene in aiuto la classe "Modello"
Creo l'istanza "Titolo" di modello: setto Titolo.Font, Titolo.Size,
Titolo.Color, ecc...
Creo l'istanza "Testo Semplice" di modello: e setto le proprietà opportune.
A questo punto dico a swing di utilizzare l'istanza Titolo e tutte le JLabel
che creo appariranno con quelle proprietà.
Poi uso l'istanza "Testo Semplice" e le nuove jlabel utilizzeranno
quell'aspetto lì.
Spero di essermi spiegato.
Comunque ripeto di non essere sicuro che questa roba esista in java, io sono
sicuro di averlo letto da qualche parte ultimamente, ma non ricordo dove e
non ricordo come si chiamasse questa Classe. Potrebbe anche essere stata
sviluppata da un'azienda esterna e che non faccia parte del runtime java.
Non è che mi serva poi tanto, effettivamente sono 3 label tutte uguali, le
clono e sto apposto, manco il metodo creaLabel conviene perché è sprecato
per tre label, adesso è solo curiosità... :)

]NEO[ ha scritto:

le api Swing si basano sul modello MVC, pertanto ogni componente può 
essere scomposto in 3 componenti:
Il modello -------> la logica
La vista ---------> l'estetica
il controllo------> la reazione ad un evento
i componenti non sono altro che WRAPPER, cioè oggetti che racchiudono 
insieme, nascherandole al pogrammatore, le tre componenti.
Quello che dici è pertanto da un punto di vista logico realizzabile, il 
prob è che non ho idea di come si implementi ^_^

 
Una soluzione che mi viene in mente è quella di crearti una classe
MyLabel che estende JLabel e che nel costruttore setta tutte le
proprietà secondo i tuoi gusti. Qualcosa del tipo:
class MyLabel extends JLabel{
  public MyLabel(String text){
    super(text);
    setFont(...);
    setBackground(...);
    ...
  }
}
In questo modo puoi continuare a scrivere 
panel.add(new MyLabel("label1")
Per quanto riguarda l'impostazione di proprietà di default per tutti i
componenti creati da un certo punto in poi invece, non saprei
aiutarti.
Ciao.