Componenti Swing

Ci sto lavorando

 

JFrame

 

 

 
 

 

 

Osservazioni:

Perchè alcune cose non hanno effetto?

Osserviamo questo codice:

 3 import java.awt.Color;
 4 
 5 public class NoFun extends javax.swing.JFrame {
 6     public NoFun() {
 7         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 8         //setBackground(Color.white);
 9         getContentPane().setBackground(Color.white);
10         setBounds(800, 500, 400, 300);
11         //pack();       
12     }
13 
14     public static void main(String args[]) {
15         java.awt.EventQueue.invokeLater(new Runnable() {
16             public void run() {
17                 NoFun jf = new NoFun();
18                 //jf.setBounds(800,500,400,300);
19                 //jf.getContentPane().setBackground(Color.white);              
20                 jf .setVisible(true);
21             }
22         });
23     }                  
24 }

 

Cosi funziona. Si limita ad aprire una finestra al centro dello schermo avente fondo bianco.

Ora se osserviamo quest'altra versione:

3 import java.awt.Color;
 4 
 5 public class NoFun extends javax.swing.JFrame {
 6     public NoFun() {
 7         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 8         setBackground(Color.white);
 9         //getContentPane().setBackground(Color.white);
10         setBounds(800, 500, 400, 300);
11         pack();       
12     }
13 
14     public static void main(String args[]) {
15         java.awt.EventQueue.invokeLater(new Runnable() {
16             public void run() {
17                 NoFun jf = new NoFun();
18                 //jf.setBounds(800,500,400,300);
19                 //jf.getContentPane().setBackground(Color.white);              
20                 jf .setVisible(true);
21             }
22         });
23     }                  
24 }

 

Si otterrà una finestra collassata dimensioni zero comunque al centro dello schermo, che se andiamo ad allargare mostra un fondo grigio. Cosa è successo? La riga 8 non ha effetto perchè va a colorare la root uno strato inferiore al contentPane che gli stà davanti ed ha il fondo per default grigio. Nel codice precedente infatti abbiamo richiamato il contentPane e quello abbiamo colorato, quindi il bianco si vede.

 

Perchè la finestra è collassata malgrado avessimo impostato le dimensioni a 400x300 riga 10, perché è attivo il pack(); che stringe la finestra intorno agli oggetti che contiene. In questo caso non ce ne sono e quindi la collassa completamente se commentiamo la 11 vedremo che la finestra torna ad avere le sue dimensioni.

Una curiosità se si fa generare automaticamente da Netbeans il frame pur avendo impostato sia colore che dimensioni, me lo fa apparire grigio e collassato, perché per una strana ragione non richiama il contentPane e aggiunge il pack(); Un bag chissà