Il layout che hai utilizzato è quello più malleabile alle proprie esigenze, ma forse un po' più complicato, secondo me negli altri il ridimensionamento è automatico, in questo mi sembra tu debba settare il parametro del ridimensionamento in questo modo:
c.fill = GridBagConstraints.BOTH;
Ossia dici di ridimensionare su entrambe le dimensioni (scusa il gioco di parole).
Ecco un esempio preso da tutorial della sun, un po' ripulito:
codice:
/* TextDemo.java requires no other files. */
import java.awt.*;
import javax.swing.*;
public class TextDemo extends JPanel{
protected JTextArea textArea;
public TextDemo() {
super(new GridBagLayout());
textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(textArea,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//Add Components to this panel.
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
add(scrollPane, c);
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("TextDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new TextDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}