Ciao a tutti.

Sto creando una interfaccia grafica.
Al momento ho 3 macro oggetti che il mio frame deve contenere.

Incollo il codice e poi vi spiego:

Codice PHP:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;


public class 
ChatUI {
    public static 
void main (String [] args)
    {
        
EventQueue.invokeLater (new Runnable()
        {
            public 
void run(){
                
start();
            }
        });
    }

    public static 
void start()
    {
        final 
JTextPane textPane = new JTextPane();
        final 
JTextField chatArea = new JTextField(20);

        
GridBagLayout layout = new GridBagLayout();
        
GridBagConstraints lim = new GridBagConstraints();


        
JScrollPane areaScroller = new JScrollPane(textPane);
        
areaScroller.setPreferredSize (new Dimension(400,400));

        
JButton button = new JButton(new AbstractAction("Colore") {
        @
Override public void actionPerformed(ActionEvent e) {
            
AttributeSet currentAtt textPane.getCharacterAttributes();
            
Color color StyleConstants.getForeground(currentAtt);
            
color JColorChooser.showDialog(textPane"Colore"color);
            if(
color != null) {
                
SimpleAttributeSet att = new SimpleAttributeSet();
                
StyleConstants.setForeground(attcolor);
                
textPane.setCharacterAttributes(atttrue);
                
textPane.requestFocusInWindow();
                }
            }
        });

        
lim.gridx 0;
        
lim.gridy 0;
        
lim.gridwidth 2;
        
lim.gridheight=1;
        
layout.setConstraints(areaScrollerlim);

        final 
ImageIcon immagine = new ImageIcon("images/green.jpg");
       
JComponent background = new JPanel() {

            @
Override
          
protected void paintComponent(Graphics g) {
            
g.drawImage(immagine.getImage(), 00getWidth(), getHeight(), null);
            }
        };
        
background.setPreferredSize(new Dimension(400400));
    
        
JPanel foreground = new JPanel();

        
foreground.setLayout(layout);
        
foreground.setOpaque(false);
     
//   foreground.setAlignmentX(Component.LEFT_ALIGNMENT);


        
JPanel buttonContainer = new JPanel ();

        
lim.gridx 0;
        
lim.gridy 1;
        
lim.gridwidth 1;
        
lim.gridheight=1;
        
layout.setConstraints(buttonContainerlim);

        
buttonContainer.add(button);

        
lim.gridx 1;
        
lim.gridy 1;
        
lim.gridwidth 1;
        
lim.gridheight=1;
        
layout.setConstraints(chatArealim);

        
JPanel contenitore = new JPanel();
        
        
//contenitore.setLayout(layout);


        
foreground.add(areaScroller);
        
foreground.add(buttonContainer);
        
foreground.add(chatArea);

        
contenitore.add(foreground);
        
contenitore.add(background);


        
JFrame window = new JFrame("ChatUI");
        
window.add(contenitore);
        
window.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
        
window.pack();
        
window.setVisible(true);


    }


I miei 3 macro componenti sono: areaScroller, textField e il buttonContainer.

Ora , vorrei ordinarli con il gridBagLayout e ho formato una griglia immaginaria.
Questa griglia e' (come si vede dalle costanti di gridBagLayout) un quadrato, diviso in 4: la prima riga, deve essere occupata da areaScroller (che occupa i 2 quadratini della prima riga).
Gli ultimi due quadratini in basso son occupati da textField e dal buttonContainer.

Ora, mi sapere dire dove sbaglio?
Perche' invece che sovrappormi i miei elementi, mette foreground e contenitore separati.

In pratica uso un "master" contenitore.
Questo contenitore a sua volta contiene il JPanel background, che contiene l'immagine di fondo.
Foreground invece contiene tutti i miei componenti della UI, quindi io ho applicato al foreground il mio ordinamento.
Pero' devo aver sbagliato qualcosa li...

Help!