On Tue, 2006-02-21 at 10:28 -0500, Lillian Angel wrote:
> Hello,
> 
> Tom F. and I worked on changing how we handle Container lightweights and
> Component lightweights. This bug showed up in MegaMek and several test
> cases. 

Attached is the test case that we used to fix this. Try it without the
patch and resize the Frame to see what happens.

Lillian
import java.awt.*;

public class Grid2 extends Container {
    private Canvas canHex;

    private Label labElev;
    private TextField texElev;
    private Button butElevUp;
    private Button butElevDown;

    private Label labTerrain;
    private java.awt.List lisTerrain;

    private Button butDelTerrain;

    private Panel panTerrainType;
    private Choice choTerrainType;
    private TextField texTerrainLevel;

    private Panel panTerrExits;
    private Checkbox cheTerrExitSpecified;
    private TextField texTerrExits;
    private Button butTerrExits;

    private Panel panRoads;
    private Checkbox cheRoadsAutoExit;

    private Label labTheme;
    private TextField texTheme;

    private Button butAddTerrain;

    private Label blankL;

    private Label labBoard;
    private Panel panButtons;
    private Button butBoardNew, butBoardLoad;
    private Button butBoardSave, butBoardSaveAs;
    private Button butBoardSaveAsImage;
    private Button butMiniMap;

	public static void main(String[] args)
	{
		new Grid2();
	}
    	
	public Grid2()
	{
		Frame p = new Frame();
		p.setLayout(new BorderLayout());

	        Panel scrollPane = new Panel();
	        scrollPane.setLayout (new BorderLayout());
	        Scrollbar vertical = new Scrollbar (Scrollbar.VERTICAL);
	        Scrollbar horizontal = new Scrollbar (Scrollbar.HORIZONTAL);
	        scrollPane.add (new Canvas(), BorderLayout.CENTER);
	        scrollPane.add (vertical, BorderLayout.EAST);
        	scrollPane.add (horizontal, BorderLayout.SOUTH);
	        p.add(scrollPane, BorderLayout.CENTER);

		setupEditorPanel();		
		p.add(this, BorderLayout.EAST);	
                p.setSize(800, 600);
                p.show();
		System.out.println(this.getLayout());
		doLayout();
	}

    private void setupEditorPanel() {
        canHex = new Canvas();
        labElev = new Label("a", Label.RIGHT); //$NON-NLS-1$
        texElev = new TextField("0", 1); //$NON-NLS-1$
        butElevUp = new Button("BoardEditor.butElevUp"); //$NON-NLS-1$
        butElevDown = new Button(("BoardEditor.butElevDown")); //$NON-NLS-1$
    
        labTerrain = new Label(("BoardEditor.labTerrain"), Label.LEFT); //$NON-NLS-1$
        lisTerrain = new java.awt.List(6);
        
        butDelTerrain = new Button(("BoardEditor.butDelTerrain")); //$NON-NLS-1$
        choTerrainType = new Choice();
        texTerrainLevel = new TextField("0", 1); //$NON-NLS-1$
        butAddTerrain = new Button(("BoardEditor.butAddTerrain")); //$NON-NLS-1$
        butMiniMap = new Button(("BoardEditor.butMiniMap")); //$NON-NLS-1$
        
        panTerrainType = new Panel(new BorderLayout());
        panTerrainType.add(choTerrainType, BorderLayout.WEST);
        panTerrainType.add(texTerrainLevel, BorderLayout.CENTER);
        
        cheTerrExitSpecified = new Checkbox(("BoardEditor.cheTerrExitSpecified")); //$NON-NLS-1$
        butTerrExits = new Button(("BoardEditor.butTerrExits")); //$NON-NLS-1$
        texTerrExits = new TextField("0", 1); //$NON-NLS-1$
    
        panTerrExits = new Panel(new FlowLayout());
        panTerrExits.add(cheTerrExitSpecified);
        panTerrExits.add(butTerrExits);
        panTerrExits.add(texTerrExits);

        panRoads = new Panel(new FlowLayout());
        cheRoadsAutoExit = new Checkbox(("BoardEditor.cheRoadsAutoExit")); //$NON-NLS-1$
        panRoads.add(cheRoadsAutoExit);

        labTheme = new Label(("BoardEditor.labTheme"), Label.LEFT); //$NON-NLS-1$
        texTheme = new TextField("", 15); //$NON-NLS-1$
        labBoard = new Label(("BoardEditor.labBoard"), Label.LEFT); //$NON-NLS-1$
        butBoardNew = new Button(("BoardEditor.butBoardNew")); //$NON-NLS-1$
        butBoardLoad = new Button(("BoardEditor.butBoardLoad")); //$NON-NLS-1$
        butBoardSave = new Button(("BoardEditor.butBoardSave")); //$NON-NLS-1$
        butBoardSaveAs = new Button(("BoardEditor.butBoardSaveAs")); //$NON-NLS-1$
        butBoardSaveAsImage = new Button(("BoardEditor.butBoardSaveAsImage")); //$NON-NLS-1$

        panButtons = new Panel(new GridLayout(3, 2, 2, 2));
        panButtons.add(labBoard);
        panButtons.add(butBoardNew);
        panButtons.add(butBoardLoad);
        panButtons.add(butBoardSave);
        panButtons.add(butBoardSaveAs);
        panButtons.add(butBoardSaveAsImage);
        
        blankL = new Label("", Label.CENTER); //$NON-NLS-1$
        
        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        setLayout(gridbag);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.0;    c.weighty = 0.0;
        c.insets = new Insets(4, 4, 1, 1);
        
        c.gridwidth = GridBagConstraints.REMAINDER; 
        addBag(canHex, gridbag, c);
        c.gridwidth = 1; 
        addBag(labElev, gridbag, c);
        addBag(butElevUp, gridbag, c);
        addBag(butElevDown, gridbag, c);
        c.gridwidth = GridBagConstraints.REMAINDER; 
        addBag(texElev, gridbag, c);
        
        addBag(labTerrain, gridbag, c);
        addBag(lisTerrain, gridbag, c);
        addBag(butDelTerrain, gridbag, c);
        addBag(panTerrainType, gridbag, c);
        addBag(panTerrExits, gridbag, c);
        addBag(panRoads, gridbag, c);
        addBag(labTheme, gridbag, c);
        addBag(texTheme, gridbag, c);
        addBag(butAddTerrain, gridbag, c);
        addBag(butMiniMap, gridbag, c);
    
        c.weightx = 1.0;    c.weighty = 1.0;
        addBag(blankL, gridbag, c);
        
        c.weightx = 1.0;    c.weighty = 0.0;
        addBag(panButtons, gridbag, c);
    }
    
    private void addBag(Component comp, GridBagLayout gridbag, GridBagConstraints c) {
        gridbag.setConstraints(comp, c);
        add(comp);
    }
}

Reply via email to