PDA

View Full Version : Espandere un JFrame alla massima dimensione dello schermo [JAVA]


Gerhard83
25-04-2008, 21:21
Salve,
qualcuno sa dirmi come posso impostare l'evento di espandibilità massima della finestra alle dimensioni dello schermo su cui l'applicazione sta girando?
cioè di default quando eseguo il mio programma imposto con setSize() delle dimensioni di default, e per metterlo a tutto schermo premo Ingrandisci, ma vorrei che la pressione di Ingrandisci fosse impostata di default.

Ciao

andbin
25-04-2008, 21:29
qualcuno sa dirmi come posso impostare l'evento di espandibilità massima della finestra alle dimensioni dello schermo su cui l'applicazione sta girando?
cioè di default quando eseguo il mio programma imposto con setSize() delle dimensioni di default, e per metterlo a tutto schermo premo Ingrandisci, ma vorrei che la pressione di Ingrandisci fosse impostata di default.Se hai almeno Java 1.4, allora vedi il metodo setExtendedState(). Nota che un certo extended-state potrebbe anche non essere supportato dalla piattaforma (lo si scopre con Toolkit.isFrameStateSupported() ).

Se non hai almeno Java 1.4 o l'extended-state MAXIMIZED_BOTH non è supportato si può comunque ottenere la dimensione dello schermo da Toolkit ed impostare a questa dimensione il tuo frame. Non è proprio esattamente come una "vera" massimizzazione ma ... meglio che niente.

Gerhard83
25-04-2008, 22:52
grazie mille, funziona!

La soluzione che mi hai consigliato come seconda alternativa l'avevo già provata, ma la parte bassa del frame veniva tagliata dalla barra di windows e quindi non mi piaceva come soluzione, invece con
setExtendedState( JFrame.MAXIMIZED_BOTH) funziona alla perfezione.

grazie ancora,
saluti :)

andbin
25-04-2008, 23:09
ma la parte bassa del frame veniva tagliata dalla barra di windowsSì, è vero, usando la dimensione completa dello schermo ovviamente parti del tuo frame possono andare "sotto" toolbar varie o la taskbar di Windows.

Comunque, giusto per la cronaca, la classe GraphicsEnvironment ha il metodo getMaximumWindowBounds() che ritorna un Rectangle che indica la massima area sfruttabile tenendo presente la presenza di toolbar native o altro.

Gerhard83
26-04-2008, 08:49
ciao,
senti ho un'altra cosa da chiederti. Ho creato una JMenuBar all'interno del quale ho messo dei componenti JMenu e JMenuItem. Ho impostato tramite setBackground() e setForeground() rispettivamente colore di sfondo e colore del testo dei vari componenti.
Il problema è che quando vado sopra questi componenti con un evento di tipo MouseEvent dell'interfaccia MouseListener nonostante imposti dei nuovi colori di background e di testo continuano a uscirmi quelli di default dell look-and-feel (utilizzando ill L&F Windows esce un grigio scuro e il testo nero).

Ti posto il codice che ho utilizzato per la realizzazione dell'ascoltatore di eventi:


private class MouseHandler implements MouseListener
{
public void mousePressed( MouseEvent event )
{

}

public void mouseClicked( MouseEvent event )
{

}

public void mouseReleased( MouseEvent event )
{

}

public void mouseEntered( MouseEvent event )
{
if( event.getSource() == fileMenu )
{
fileMenu.setBackground( colorBarSelected );
fileMenu.setForeground( colorTextSelected );
}

}

public void mouseExited( MouseEvent event )
{
fileMenu.setBackground( colorBar );
fileMenu.setForeground( colorText );
}
}

Poi nel costruttore della mia classe che estende JMenuBar registro l'ascoltatore sul componente fileMenu di tipo JMenu.

Insomma come mai non cambia lo sfondo nonostante la registrazione dell'evento sia corretta( ho provato a far visualizzare una stringa e a farla scomparire quando il mouse entra e esce dai margini del componente, ma per quanto riguarda backgroun e testo non ne vuole sapere.

ciao

vincenzo83
26-04-2008, 11:20
Ciao, prova ad utilizzare SwingUtilities.updateComponentTreeUI(Component c)

Gerhard83
27-04-2008, 11:09
purtroppo non credo sia questo il metodo.
ritengo che forse dovrei mettermi a riprogettare la barra tramite il BasicMenuItemUI, ma perderei un sacco di tempo.

andbin tu che dici?

lovaz
27-04-2008, 12:15
Prova con setOpaque( true )

vincenzo83
27-04-2008, 16:21
purtroppo non credo sia questo il metodo.

In attesa di qualcuno più esperto...
prova a fare questo:

public void mouseEntered( MouseEvent event ) {
if( event.getSource() == fileMenu ) {
fileMenu.setBackground( colorBarSelected );
fileMenu.setForeground( colorTextSelected );
SwingUtilities.updateComponentTreeUI(myFrame);
}
}

Dove myFrame deve essere un rifermento ad un oggetto JFrame.


Fai la stessa cosa per: public void mouseExited( MouseEvent event )