Newsgroup: it.comp.java
Titolo: Ma i JPanel si ridimensionano?

Sto cercando di realizzare la mia maschera con l'aiuto di voi tutti,
quindi grazie a tutti coloro che hanno già contribuito.
Ho studiato le classi GridBagLayout e GridBagConstraints e devo dire
che potrebbero fare al caso mio.
Si è però aggiuno un problema, vedo che i JPanel che ho creato e
ridimensionato con
.setPrefereedSize(Dimension d) , non si ridimensionano!!!
Vi posto una parte del codice, dicendovi che voglio realizzare un frame
con tre bande verticali(i tre pannelli) che devono avere la larghezza
del frame e l'altezza da me decisa.
class prova
{
      public static void main(String[] args)
	{
		JFrame fr = new JFrame ("Finetra principale");
		fr.setSize(800,600);
		Container co = fr.getContentPane();
		GridBagLayout gbl = new GridBagLayout();
		co.setLayout(gbl);
		GridBagConstraints gbc;
		JPanel header = new JPanel();
		header.setBackground(Color.green);
		JPanel body = new JPanel();
		body.setBackground(Color.red);
		JPanel footer = new JPanel();
		footer.setBackground(Color.yellow);
		gbc = new GridBagConstraints();
		Dimension d = new Dimension(800,100);
		header.setPreferredSize(d);
		co.add(header);
		gbc.gridx=0;
		gbc.gridy=0;
		gbc.fill=GridBagConstraints.BOTH;
		gbl.setConstraints(header,gbc);
		//quest'ultimo blocco viene ripetuto per gli altri due panel
		fr.setVisible(true);
               }
}
il risultato sono tre piccolissime bande orizzontali centrate, che non
hanno affatto le dimensioni da me impostate
Come mai?

godm...@tiscali.it
 ha scritto:

Allora le dimensioni del pannello potrebbero dipendere dai vari Layout 
che usi.
Per esempio nel BorderLayout se inserisco un JPanel al centro, quello 
occuperà PER FORZA tutta l'area a disposizione, indipendentemente dalle 
dimensioni che gli assegno. Se lo posiziono a nord o a sud la larghezza 
sarà uguale alla massima disponibile e sarà definibile da me solo 
l'altezza (per l'est e l'ovest vale il viceversa).
Quindi la cosa potrebbe dipendere la Layout che usi.
Non possso dirti di più in quanto lo specifico Layout che hai usato 
cerco di non utilizzarlo in quanto troppo macchinoso.
Delvy

Ho capito, anche io la penso come te.
Allora dammi una dritta ,
devo avere una finestra divisa in tre fascie orizzontali , ma devono
avere una grandezza fissa , gli oggetti all'interno possono variare ,
ma le dimensione di queste fasce devono rimanere costanti.
Cosa mi suggerisci?

godm...@tiscali.it
 ha scritto:

Ti consiglio il TableLayout:
https://tablelayout.dev.java.net/
Ciao,
    Bruno
P.S.
Il JavaDay č qui!
http://www.javaday.it
-- 
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
| Coordinatore del JUG Torino - 
http://www.jugtorino.it

 
...questo non lo avevo ancora visto!
http://madbean.com/static/blog/2004/17/anim.swf
eh eh eh!
Il GB è veramente un casino!
Ciao,
     Bruno.
P.S.
Il JavaDay è qui!


Ragazzi ho risolto.
La risposta è si si ridimensionano col metodo .setSize() o
.setPreferredSize()
Nel mio codice c'è un piccolo errore di dimensioni !
Infatti ho impostato il frame principale a 800x600 ma internamente
posso mettere dei pannelli la cui somma delle dimensioni deve essere
inferiore a 800x600 poichè ci sono la barra del titolo e i bordini
della finestra principale che rubano spazio, all'incirca lo spazio
disponibile è 790x570   !!
Ecco qui risolto il mio dilemma.
Rispondendo a chi mi ha detto che è complicato utilizzare
GridBagLayout dico che me lo sono studiato e se ha bisogno sono qui
Ciao ragazzi e grazie.

 
Io personalmente mi sa che non ne ho bisogno :-), ma lo spirito è quello 
giusto, i newsgroup servono a questo!
Comunque ti consiglio nuovamente di dare un'occhiata al TableLayout: al 
limite prova a riprodurre gli esempi che ci sono lì per valutare quanto 
sarebbe complesso realizzarli con GridBagLayout
Ciao,
     Bruno



Ho tolto setSize() e messo pack() come hai detto tu, però vedo che ci
sono dei problemi quando vado a fare il ridimensionamento della
finestra. Tali problemi di risolvono se visualizzo a tutto schermo.
A questo punto vorrei risolvere così se possibile:
rilevare la risoluzione dello schermo e impostare il JFrame a tutto
schermo , senza possibilità di ridimensionamento.
Come posso fare?

 
Cosi:
import javax.swing.*;
import java.awt.*;
public class Gui
{
     public static void main(String args[])
     {
         JFrame f = new JFrame("Hello!");
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         sizeToScreen(f);
         f.setVisible(true);
     }
     private static void sizeToScreen(JFrame frame)
     {
         Toolkit kit = Toolkit.getDefaultToolkit();
         Dimension screenSize = kit.getScreenSize();
         GraphicsConfiguration config = frame.getGraphicsConfiguration();
         Insets insets = kit.getScreenInsets(config);
         screenSize.width -= (insets.left + insets.right);
         screenSize.height -= (insets.top + insets.bottom);
         frame.setSize(screenSize);
         frame.setLocation(insets.left, insets.top);
     }
}
O in alternativa cosi:
import javax.swing.*;
import java.awt.*;
public class Gui
{
     public static void main(String args[])
     {
         JFrame f = new JFrame("Hello!");
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         f.setExtendedState(Frame.MAXIMIZED_BOTH);
         f.setResizable(false);
         f.setVisible(true);


 [...]
 >
Ah, aggiungi nel primo esempio:
     f.setResizable(false);
Con un copia&incolla di troppo me lo sono perso :-)


Bruno sei forte, ora provo quello che mi hai postato.
Non è che non voglio utilizzare i TableLayout (quello che tu mi
consigli) però  sono andato sul sito e ho visto che mi devo registrare
!??
Adesso sto preparando una classe che prende i dati da mysql e crea una
tabella.
Ho un pò di difficoltà poi ti faccio sapere.
Grazie dei tuoi consigli e aiuti
Bruno Bossola ha scritto:


Rettifico
ho scaricato   TableLayoutExtensions.jar
 vediamo che riesco a capirci