Solved

implement grid in java.awt - cells span multiple columns

Posted on 2007-12-06
7
893 Views
Last Modified: 2013-11-23
Hi,

I need to create a grid like component in java.awt (not using Swing) where cells span multiple rows.
Has anyone done this?

Thanks
0
Comment
Question by:SAJC
  • 3
  • 3
7 Comments
 
LVL 92

Expert Comment

by:objects
ID: 20418105
not that i'm aware of , not much is done using straigt awt these days.
0
 
LVL 13

Expert Comment

by:Bart Cremers
ID: 20418452
You can get far by using a GridBagLayout:
/*
 * Copyright (c) 2007, Your Corporation. All Rights Reserved.
 */
 
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
/**
 * @author Bart Cremers
 * @since 6-dec-2007
 */
public class GridExample extends Panel {
 
    private static final GridBagConstraints gbc = new GridBagConstraints();
 
    static {
        gbc.fill = GridBagConstraints.BOTH;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
    }
 
    public GridExample() {
        super(new GridBagLayout());
 
        add(new BorderedLabel("A"), 1, 1, 1, 1);
        add(new BorderedLabel("B"), 1, 2, 1, 1);
        add(new BorderedLabel("C"), 1, 3, 1, 1);
        add(new BorderedLabel("D"), 1, 4, 1, 1);
        add(new BorderedLabel("E"), 1, 5, 1, 1);
 
        add(new BorderedLabel("F"), 2, 1, 1, 3);
        add(new BorderedLabel("G"), 2, 4, 1, 1);
        add(new BorderedLabel("H"), 2, 5, 3, 1);
 
        add(new BorderedLabel("I"), 3, 1, 1, 1);
        add(new BorderedLabel("J"), 3, 2, 2, 2);
        add(new BorderedLabel("K"), 3, 4, 1, 1);
 
        add(new BorderedLabel("L"), 4, 1, 1, 1);
        add(new BorderedLabel("M"), 4, 4, 1, 1);
        add(new BorderedLabel("N"), 4, 5, 1, 1);
 
 
    }
 
    private void add(Component comp, int row, int col, int rowspan, int colspan) {
        gbc.gridx = col;
        gbc.gridy = row;
        gbc.gridwidth = colspan;
        gbc.gridheight = rowspan;
 
        add(comp, gbc);
    }
 
    public static void main(String[] args) {
        final Frame frame = new Frame();
        frame.addWindowListener(new WindowAdapter() {
 
            public void windowClosing(WindowEvent e) {
                frame.dispose();
            }
        });
        frame.add(new GridExample());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
 
    private static class BorderedLabel extends Label {
 
        private BorderedLabel(String text) {
            super(text, CENTER);
        }
 
        public void paint(Graphics g) {
            super.paint(g);
 
            g.setColor(getForeground());
            g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
        }
    }
 
}

Open in new window

0
 

Author Comment

by:SAJC
ID: 20440795
Thanks for the above Bart, however, my fault, I should have stated I can't use GridBagLayout.
Sorry for late reply.
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 13

Expert Comment

by:Bart Cremers
ID: 20440818
What's the reason for not being able to use gridbaglayout? It's available in AWT.
0
 

Author Comment

by:SAJC
ID: 20441120
The reason for not using any of the AWT layouts is that the number of rows and columns are arbitrary.
Will not know these till runtime.

thanks
0
 
LVL 13

Accepted Solution

by:
Bart Cremers earned 500 total points
ID: 20441232
GridBagLayout doesn't require you to create a grid with fixed rows and colums up front.

You can simply dynamically add new "cells" or remove them.
0
 

Author Comment

by:SAJC
ID: 20441682
ok, thanks Bart
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org Go to that link and select download selenium in the right hand columnThat will then direct you to their download page.From that page s…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
THe viewer will learn how to use NetBeans IDE 8.0 for Windows to perform CRUD operations on a MySql database.

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question