GridBag Layout Size Issues

From: Merlin_1102 (merlin_1102_at_hotmail.ocm)
Date: 11/23/03

  • Next message: kevinc: "Re: JavaBeans"
    Date: Sun, 23 Nov 2003 17:24:29 -0500
    
    

    I have read previous posts on the gridbaglayout and none seem to answer my
    questions (sorry if any of these have been aske dI really did search and
    found one large thread which took me an hour to read..
    Anyway my problem is as such i need to make something like a simcity game
    (not quite though). Bassically I need a grid in which labels (using the
    image icon command) can be disbladed. This grid needs to be resizable ie it
    could go from 20x20 to 20x25 or something like that. I currently have the
    grid set inside a JPanel which is set inside a Tab.... My problem is that
    when I place stuff in the grid the settings are all messed up. Nothing
    spaces out correctly and its really messy and ugly. Below is a diagram of
    what im looking for

    /---------------------\/-------------------------\
    | Tab 1 | Tab 2 |
    \---------------------|--------------------------/
    /Tab Area----------------------------------\
    | ------- -------- ------- -------- ------- |
    | |Label| | | | | | | | | |
    | ------- -------- ------- -------- ------- |
    | ------- -------- ------- -------- ------- |
    | | | | | | | | | | | |
    | ------- -------- ------- -------- ------- |
    | ------- -------- ------- -------- ------- |
    | | | | | | | | | | | |
    | ------- -------- ------- -------- ------- |
    \--------------------------------------------/
    The above is an example of a 5 by 3 grid Eahc area is a labwel which will
    contain an icon being exactly 48by48pixels.
    When the grid is say smaller (say 1x1) i want it to be centered (ie the
    label sizes remains the same) and the grid area is just cenetered IE Below:

    /---------------------\/-------------------------\
    | Tab 1 | Tab 2 |
    \---------------------|--------------------------/
    /Tab Area----------------------------------\
    | |
    | |
    | |
    | ------- |
    | | | |
    | ------- |
    | |
    | |
    \--------------------------------------------/

    My problem is I get this when i try a 5 by 5 grid
    /---------------------\/-------------------------\
    | Tab 1 | Tab 2 |
    \---------------------|--------------------------/
    /Tab Area----------------------------------\
    | |
    | |
    | ------ |
    | |------| |
    | -| | |
    | ------- |
    | |
    | |
    \--------------------------------------------/

    IE the grids dont space out and they overlap each other..and I cannot for
    the life of me figure out why.!! The code is below any suggestions?

      private LandscapeViewControl theModel;
      private GridSection[][] gridLayout;

      // The current layer which is being built (ie base, plant, canopy)
      private int theLayer;

      // Layout Properties
      private GridBagConstraints constraints;
      private GridBagLayout gbLayout;

      public GridLayers(LandscapeViewControl model, int layer)
      {
        this.theModel = model;
        this.theLayer = layer;
        this.theModel.addView(this);

        this.makeGrid();
        JLabel xLabel = new JLabel(" dfs", SwingConstants.CENTER);

        this.addComponent(xLabel,2,2);
        JLabel yLabel = new JLabel(" dfs2", SwingConstants.CENTER);
        this.addComponent(yLabel, 1,1);
        //this.registerListeners();
      }

      private void makeGrid()
      {
        int height = this.theModel.getGridHeight();
        int width = this.theModel.getGridWidth();
        // Creates an array of GridSections in the gridlayout variable
        this.gridLayout = new GridSection[width][height];

        // Sets the layout manager to be the 'GridLayout' with 1 extra row and
    column
        // for numbers to help the user find the correct square on the grid
        gbLayout = new GridBagLayout();
        constraints = new GridBagConstraints();
        this.setLayout(gbLayout);

        // Fills the gird with information
        //this.fillGrid(width,height);
      }

      private void addComponent(Component component, int row, int column)
      {
        // set the gridx and gridy
        constraints.gridx = column;
        constraints.gridy = row;

        // Set the gridwidth and gridheight
        constraints.gridwidth = 48;
        constraints.gridheight = 48;
        gbLayout.setConstraints(component, constraints);
        this.add(component);
      }

    Bassically where the
        this.addComponent(xLabel,2,2);
        JLabel yLabel = new JLabel(" dfs2", SwingConstants.CENTER);
        this.addComponent(yLabel, 1,1);
        //this.registerListeners();
    is located a a call to the function below will be called (the labels are in
    simply for testing purposes) So i m guessing if it can startt working wiuth
    the above code then the below code will work to.. Any possiblities of help?
    or adivce?

      private void fillGrid(int width, int height)
       {
            // Function lists labels straight across (1 to the width of the grid
    or the number of columns)
            this.createXLabels(width);

            // Loops through as many times as the user specificed
          for (int y = 0; y < height; y++)
          {
                // Sames as the Createxlabel except is labels vertically
                this.createYLabel(y);

            // Loops through and adds the labels for this particular row
             for (int x = 0; x < width; x++)
             {
                GridSection square = new GridSection(width, height, theLayer,
    theModel);
                this.gridLayout[x][y] = square;
                //this.add(square);
                constraints.fill = GridBagConstraints.BOTH;
                this.addComponent(square, y, x);
             } // for
          } // for
       } // fillGrid

    THE GRIDSECTION CLASS in case it helps
    public class GridSection extends JLabel
    {
      // Constants which determine thw width and height of each sqaure
       public static final int SQUARE_W = 48;
       public static final int SQUARE_H = 48;

       private int width;
       private int height;
       private int theLayer;
       private LandscapeViewControl theModel;

      public GridSection(int X, int Y, int layer, LandscapeViewControl model)
      {
        this.theModel = model;
        this.width = X;
        this.height = Y;
        this.theLayer = layer;

        this.setSection();
      }

      private void setSection()
      {
        // Sets the size of the square
        //this.setSize(new Dimension(SQUARE_W, SQUARE_H));
        //this.setPreferredSize(new Dimension(SQUARE_W, SQUARE_H));

        // Sets the square border to be raised
        this.setBorder(new EtchedBorder(EtchedBorder.RAISED));
        this.setIcon(new ImageIcon(this.theModel.getImage(width, height,
    theLayer)));
      }

       public void updateData()
       {
          // Set the label to the new image icon for the corresponding section
          this.setIcon(new ImageIcon(this.theModel.getImage(width,height,
    theLayer)));
       }
    }


  • Next message: kevinc: "Re: JavaBeans"

    Relevant Pages

    • Re: This program is not thread safe and cause run time error in debug mode
      ... As I have written this error appear only in debug mode and not in release ... private void start_Click ... private void RefreshTime(int hh, int mm, int ss) ...
      (microsoft.public.dotnet.languages.csharp)
    • Adding week to user control.
      ... private void InitializeComponent() ... public int Row; ... private SolidBrush m_sbBack = new SolidBrush; ...
      (microsoft.public.dotnet.languages.csharp)
    • This program is not thread safe and cause run time error in debug mode
      ... partial class Form1: Form ... private void start_Click ... private void RefreshTime(int hh, int mm, int ss) ...
      (microsoft.public.dotnet.languages.csharp)
    • Re: Do I produce a handle-leak?
      ... after Nicholas came up with his question, I started Perfmon. ... > private System.Timers.Timer timer; ... > public static int Main ... > private void OnTimer ...
      (microsoft.public.dotnet.languages.csharp)
    • Re: how to resize child window?
      ... this does not change the focus of any window. ... > private System.Windows.Forms.CheckBox checkBoxParent; ... > private void InitializeComponent() ... > int FindWindow; ...
      (microsoft.public.win32.programmer.gdi)