Newsgroup: it.comp.java
Titolo: [SWING]setSize() perchè non funziona?

Salve a tutti ecco la funzione che uso per ridimensionare e riposizionare al
centro le mia finestre (JFrame).
Il mio scopo sarebbe quello di evitare che su schermi a risoluzione bassa le
finestre vadano a finire fuori dallo schermo.
Perchč JAVA sembra ignorare la mia setSize()? c'č qualche problema collegato
all'uso di questa funzione?
o provato ad aggiungere anche setBounds() ma non cambia granchč......
--------------------
INIZIO CODICE
private void initSizeAndPosition() throws Exception {
    /**
     * Dimensioni e posizione finestra
     * */
    //Dim schermo
    Dimension dimscreen=Toolkit.getDefaultToolkit().getScreenSize();
    int widthScreen= (int)dimscreen.getWidth();
    int heightScreen= (int)dimscreen.getHeight();
    //Dim finestra
    pack();
    Dimension dimwindow=this.getSize();
    int widthWindow= (int)dimwindow.getWidth();
    int heightWindow= (int) dimwindow.getHeight();
    if ((heightWindow > (heightScreen - 40)) || (widthWindow >
(widthScreen-40)))
    {
      Dimension redim=new Dimension(widthScreen -40 , heightScreen - 40);
      this.setSize(redim);
    }
    Dimension newDimWindow= this.getSize();
    Point upperCornerPosition= new Point();
    upperCornerPosition.setLocation((widthScreen /2) -
(newDimWindow.getWidth()/2),(heightScreen/2)- (newDimWindow.getHeight()/2));
    setLocation(upperCornerPosition);
    Rectangle rect=new Rectangle(upperCornerPosition, newDimWindow);
    this.setBounds(rect);
  }
FINE CODICE
---------------------------
Bye
Johnny
--
------
Per rispondermi scrivete all'indirizzo
johnnyz75 sul provider libero punto it

   }
e questo codice non farà altro che posizionarti al centro un JFrame di
dimensione (0,0).
Prova con qualcosa tipo questo semplice codice:
Dimension dimscreen=Toolkit.getDefaultToolkit().getScreenSize();
int widthScreen= (int)dimscreen.getWidth();
int heightScreen= (int)dimscreen.getHeight();
this.setBounds(widthScreen/10,heightScreen/10,widthScreen*4/5,heightScreen*4
/5);
--
Antonio Pelleriti
Redattore 
www.visualcsharp.it
--

 widthWindow=0 e heightWindow.
Sei sicuro?
Io debuggando vedo dei valori diversi da zero. Perchè la getSize() non
dovrebbe funzionare se prima non si è fatta una setSize()?
La soluzione che mi hai suggerito non è comunque diversa da quella che ho
provato io: alla fine usi un setBounds(). Il fatto è che mi pare che non
sempre la setSize() e la setBounds() abbiano effetto. Mi chiedevo se c'era
qualche motivo per questo comportamento, qualcosa che non so del
comportamento del layout delle interfacce grafiche con Java....
E poi perchè esistono queste due funzioni apparentemente simili? con una
setSize() e una setLocation() non ottengo lo stesso effetto della
setBounds()? quali differenze?
Bye
Johnny


 setBounds()? quali differenze?
si, alla fine ottieni lo stesso effetto.
Ma se vuoi solo ridimensionare usi setSize(), se vuoi solo settare la
posizione usi setLocation(). Nessuno ti obbliga a usare un metodo solo
perchè esiste.

 quello che vuoi.
Ok ho fatto le mie prove: getSize() restituisce 0 effettivamente se non č
stato fatto un setSize o un setBounds (come dici tu )oppure  un pack()
prima.... nel mio caso quindi i valori sono diversi da zero (NB:Io per
debuggare uso JBuilder 5 e sto usando il JDK 1.3.1_02 nel caso queste
differenze dipendano dalle versioni utilizzate)
Il problema l'ho comunque risolto facendo l'override della
getPreferredSize()... in pratica lo stesso codice visto prima lo inserisco
nella getPreferredSize() recuperando le dimensioni attuali della finestra
tramite super.getPreferredSize(). La mia getPreferredSize() restituisce
infine un oggetto Dimension con le dimensioni desiderate e tutto funziona.
Bye
Johnny