PDA

View Full Version : JDialog - setIconImage / JTabbedPane (linguette)


srcProgram
12-04-2004, 15:24
Salve a tutti...
passo subito al dunque:

1 - Come posso impostare la iconImage (nella barra) del JDialog?
normalmente nel caso del JFrame lo faccio con this.setIconImage(...); ma nel caso del JDialog questo non è disponibile.

2 - Avete presente il JTabbedPane? si quello con le linguette.. che switcha tra piu' sottopannelli. Il problema consiste nel fatto che, non so come posso gestire il colore della stessa linguetta. Se io imposto un dato colore per il sottopannello relativo ad una linguetta (eventualmente ad un indice), questa impostazione non si ripercuote sulla stessa linguetta... be', in ogni caso se sapete come poter gestire il colore della linguetta fatemelo sapere, thz.

Grazie & Ciau da SrcProgram :)

PGI
12-04-2004, 16:39
1) Una JDialog eredita l'icona del frame "genitore".

frame.setIconImage(image);
JDialog d = new JDialog(frame);

d ha l'icona di frame. Non credo sia possibile impostare un'icona autonoma per la JDialog, il che vuol dire che serve un frame (anche non visibile) per ogni dialog se vuoi un'icona diversa...ma questo punto tanto vale usare dei frame anziche le JDialog.

2)


JTabbedPane pane = new JTabbedPane();
UIManager.put("TabbedPane.selected", Color.BLUE);
SwingUtilities.updateComponentTreeUI(pane);


Ciao.

srcProgram
12-04-2004, 18:43
Grazie mille PGI ;)

Speravo in una tua solerte risposta... ormai ho inquadrato questo forum e soprattutto questa sezione (davvero ottima e utile) e ho visto quanto tu sia premuroso e preciso nel rispondere ai vari quesiti. :)

Ciau da srcProgram :cool:

srcProgram
12-04-2004, 21:34
Mannaggia.. ho scoperto che va tutto bene.. tranne che, per l'icona del JDialog... non viene presa se imposto il setResizable(true); :\

uffi... se sapete come ovviare questo (cioe' poter rendere il JDialog notResizable e allo stesso tempo utilizzare l'icona del frame owner, fatemi sape'.. )

bye ;)

(ancora grazie a PGI)

PGI
13-04-2004, 12:09
Macchè, non c'è verso di farlo.

Una finestra di dialogo non ridimensionabile non ha icona. Se vuoi l'icona e la finestra non ridimensionabile, tocca usare un frame.

Può essere una JDialog, Dialog o JOptionPane, proprio non la mette.

Bizzarrie dell'AWT.

Ciao.

srcProgram
13-04-2004, 13:18
Okei pgi, grazie dell'info.

Pero' c'e' un fatto.. ora ti pasto il codice (giusto il necessario, cioe' poca roba) e ti fai un'idea:

public OperJDialog(Object o, GraphicInterface graphic)
{
this.setTitle("Pannello Operatore ");
this.setSize(WIDTH, HEIGHT);
this.setUndecorated(true);
this.getRootPan().setWindowDecorationStyle(JRootPane.FRAME);
this.setResizable(false);
this.setModal(true);
this.setLocationRelativeTo(null);
this.addWindowListener(new FrameWindowListener());

...
}
Con queste impostazioni (immagino sia l'immagine data da JRootPane.FRAME) si visualizza una icona in alto a sinistra (il classico dischettino blu.. da frame brado). Tutto questo malgrado sia resizable. Non posso pero' riferirmi a quel disegnino... e non mi pare ci sia un metodo o qlcosa sensibile a quell'icona.

Se pero' provo ad usare il FRAME OWNER (userei quel reference in ingresso: graphic) nel costruttore.. tipo super(graphic); in teoria dovrebbe prendere quell'icona (potrei farmi un frame atCAzzum con lo scopo di rendergli l'icona voluta e nessun'altra utilita'). Di fatto quest'ultimo approccio funziona solo se (oltre a non essere resizable) commento il setUndecorated(true); (giustamente... ) e il this.getRootPan().setWindowDecorationStyle(JRootPane.FRAME);

La cosa e' un po' incasinata, e probabilmente non mi sono spiegato tanto bene.. cmq sia il fastidio maggiore sta in questo:

se io utilizzo il JRootPane.FRAME allora il JDialog (senza owner a sto punto) avra' una certa estetica contornante, comprensiva di icona "discketto-blu"... alla quale non so come accedere.

Forse se avessi il codice di JFrame, e vedessi come e' implementato il setImageIcon potrei fare un tentativo di replicare quel metodo nel JDialog (esteso ovviamente).

Be', ho solo incasinato di piu' la faccenda. Io per ora ho rinunciato a quell'iconcina (non era cosi' vitale) e mantengo il mio buon resizable, ma se qlcuno trovasse una soluzione alternativa... tale che possa mantenere il Dialog resizable e allo stesso tempo possa arbitrariamente affibiargli l'iconcina voluta, mi faccia sapere al piu' presto.

Ancora grazie & ciau da srcProgarm.

(PGI sei stato molto preciso e utile... purtroppo come dici tu l'awt ha le sue bizzarrie.. non ci possiamo far nulla... in ogni caso tento quest'ultimo post, magari a qlcuno viene in mente la genialata? :o )

Ciauuu! :)

PGI
13-04-2004, 14:18
Se hai un SDK dovresti avere anche il sorgente delle librerie di Java. Prova a cercare un file src.zip nella directory in cui hai installato l'sdk (da me è c:\programmi\java\j2sdk1.5.0\src.zip). Lì ci trovi tutto e di più.

E' chiaro però che l'uso del framework swing ha una sua consistenza e rapidità di sviluppo fintantochè l'accesso ai suoi strumenti avviene dal lato inferiore.

E' possibilissimo avere una finestra di dialogo con icona, non ridimensionabile e via dicendo in Java. Però occorre partire da un componente "di basso livello", tipo JWindow (che nell'albero di componenti del framework swing si trova nella parte superiore), e costruirci su una JDialog totalmente personalizzata.

Salvo che si tratti di un progetto personale (dove tutto è lecito, anzi, gli esperimenti più arditi sono addirittura auspicabili :D) la personalizzazione dei componenti grafici dovrebbe (certo, nei limiti dello scopo del progetto) tendere alla semplicità estrema attraverso quello che viene offerto, che è molto ma purtroppo non è tutto e a volte non è niente (frecciata alla giustificazione del testo, feature attesa da 4 anni e ancora oggi non implementata :mad: )

Insomma, nella mia (personalissima) filosofia, il motto principale di Java non è il mitologico "write once-run anywhere" ma "think easy-do it better (and do it open-source)".

Curiosamente rispettando il secondo viene da sè anche il primo :D.

Ciao.

srcProgram
13-04-2004, 16:26
Si ha sempre da imparare.. e io che volevo cercare nella rete il source code delle api eheh :P

Vabe', tutta esperienza in piu' :D


Grazie ancora PGI ;)