PDA

Visualizza la versione completa : Java.awt.Toolkit


silverfran278
05-11-2003, 14:56
Salve a tutti!

Mi trovo alle prese con la programmazione di interfacce grafiche in Java.

Vorrei capire l'essenza dalla classe Toolkit, dato che dalle API non riesco ad intuirlo.

Grazie!

LeleFT
05-11-2003, 15:28
La classe Toolkit rappresenta il toolkit grafico a disposizione: ti permette di avere informazioni sulla risoluzione del monitor, i colori di sistema, ti permette di "aprire" file di immagini (GIF, JPG, PNG) e ti fornisce tutta una serie di utility per manipolare queste informazioni.

Alcuni di questi metodi non possono essere chiamati direttamente, perchè essi prendono le informazioni interrogando direttamente il S.O., quindi può capitare che alcuni dei metodi non siano supportati dal S.O. in uso.

Ti faccio degli esempi delle cose che si possono fare usando questa classe:


Toolkit mioToolkit = Toolkit.getDefaultToolkit(); // ottengo il toolkit in uso
Dimension risoluzione = mioToolkit.getScreenSize(); // ottengo la risoluzione del monitor (del dekstop, in pratica)
Image immagine = mioToolkit.createImage("immagine.gif"); // creo un oggetto di tipo Image che posso visualizzare dal file immagine.gif
Cursor puntatore = mioToolkit.createCustomCursor(immagine, new Point(0,0), "miocursore"); // creo un puntatore del mouse personalizzato da usare nella mia appilcazione


E' una classe molto utile se si vuole "interfacciarsi" con il S.O. in uso...


Ciao.

silverfran278
05-11-2003, 15:51
la domanda era legata essenzialmente alla ridefinizione del metodo:

public void setVisible(boolean value)

avevo tale codice che mi risultava oscuro:

Dimension dim_schermo = Toolkit.getDefaultToolkit().getScreenSize();

quindi il riferimento dim_schermo è portatore di informazioni riguardanti lo schermo???

Grazie ancora!

silverfran278
05-11-2003, 16:27
salve!

Ancora!

date uno sguardo a questo frammento di codice:


public void setVisible(boolean visible) {
Dimension dim_schermo = Toolkit.getDefaultToolkit().getScreenSize();
int pos_x = (dim_schermo.width - getSize().width) / 2;
int pos_y = (dim_schermo.height - getSize().height) / 2;
setLocation(pos_x, pos_y);
super.setVisible(visible);
}


sapete spiegarmi lo scopo dell'ultima riga "super.setVisible(visible);"

Ho provato ad eliminarla per notare le differenze, ma non c'è nulla che cambia??? :confused:

Angelo1974
05-11-2003, 17:30
Ciao.
In pratica questo metodo tu lo avrai in qualche classe che estende Frame e cioè:

//vari import
.
.
.

public class MiaFinestra extends Frame{
.
.
.
.
public void setVisible(boolean visible) {
Dimension dim_schermo = Toolkit.getDefaultToolkit().getScreenSize();
int pos_x = (dim_schermo.width - getSize().width) / 2;
int pos_y = (dim_schermo.height - getSize().height) / 2;
setLocation(pos_x, pos_y);
super.setVisible(visible);
}
}

Non hai fatto altro che sovrascrivere ( overriding ) il metodo setVisible( boolean vis ) della super classe Frame e dopo aver fatto le tue operazioni e cioè

Dimension dim_schermo = Toolkit.getDefaultToolkit().getScreenSize();
int pos_x = (dim_schermo.width - getSize().width) / 2;
int pos_y = (dim_schermo.height - getSize().height) / 2;
setLocation(pos_x, pos_y);

Ti richiami il metodo della superclasse Frame setVisible e cioè:

super.setVisible(visible); in maniera tale tu abbia una tua versione personalizzata del meto setVisible di Frame ma che dopo diverse operazioni faccia alla fine la stessa cosa del metodo della super classe; cioè o fa vedere oppure non fa vedere la finestra.
Spero di essere stato abbastanza chiaro. Ciao
:ciauz:

LeleFT
05-11-2003, 23:50
Esattamente... in più, quel metodo, centra la tua finestra nello schermo:


//ricevo la dimesione dello schermo
Dimension dim_schermo = Toolkit.getDefaultToolkit().getScreenSize();

// centro orizzontalmente la finestra
int pos_x = (dim_schermo.width - getSize().width) / 2;

// centro verticalmente la finestra
int pos_y = (dim_schermo.height - getSize().height) / 2;

// la posiziono nelle nuove coordinate calcolate
setLocation(pos_x, pos_y);


Ciao.

silverfran278
06-11-2003, 13:10
Vi ringrazio, mi avete risolto un bel po' di casini :dhò:

Loading