Problem with basic JFrame layout manager

Discussion in 'Java' started by Mark Space, Oct 5, 2007.

  1. Mark Space

    Mark Space Guest

    Hey all, here's a problem I can't lick.

    Using just a basic JFrame, it should have a basic BorderLayout layout
    manager by default. The docs strongly imply it, and it's manifest in
    the code (source and runtime).

    However, if I add my own component to the content pane, the JFrame when
    displayed is as small as possible, only just large enough to display
    it's decorations. I implement all the size methods, and it still
    doesn't seem to do anything with them.

    Does anyone know what I might be doing wrong?

    Sample code follows. If I print out the classes involved (the first and
    the second commented-out blocks) everything is as you'd expect. A
    BorderLayout is present by default.

    If I manually set the size of the content pane (first and third
    commented-out blocks), the display is correct.

    /*
    * Captcha.java
    *
    * Created on Oct 3, 2007, 12:38:11 PM
    *
    */

    package captcha.oak;

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.LayoutManager;
    import java.awt.image.BufferedImage;
    import javax.swing.JFrame;
    import static javax.swing.WindowConstants.*;


    public class Captcha extends java.awt.Component {

    private static final int WIDTH = 250;
    private static final int HEIGHT = 85;
    private BufferedImage image;

    /** Creates and displays a test captcha.
    *
    * @param args The command line arguments are ignored.
    */
    public static void main(String[] args) {
    // TODO code application logic here
    Captcha c = new Captcha();
    JFrame jf = new JFrame("Captcha");

    jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
    jf.getContentPane().add(c, BorderLayout.CENTER);

    // java.awt.Container cp = jf.getContentPane();

    // LayoutManager lm = cp.getLayout();
    // System.err.println( cp.getClass().getName()+":: "+cp);
    // System.err.println( lm.getClass().getName()+"::"+lm );
    // System.err.println( lm.getClass().getSuperclass().getName());

    // cp.setPreferredSize(c.getPerferredSize());

    jf.pack();

    jf.setVisible(true);
    }

    public Captcha() {

    int[] data = new int[WIDTH * HEIGHT];

    for (int i = 0; i < data.length; i++) {
    int red = randomInt(255);
    int green = randomInt(255);
    int blue = randomInt(255);
    data = (red << 16) | (green << 8) | blue;
    }
    this.image = new BufferedImage(WIDTH, HEIGHT,
    BufferedImage.TYPE_INT_RGB);
    image.setRGB(0, 0, WIDTH, HEIGHT, data, 0, WIDTH);
    }

    private int randomInt(int i) {
    return (int) (java.lang.Math.random()* i);
    }

    public void paint(Graphics g) {
    g.drawImage(image, 0, 0, this);
    }

    public Dimension getPerferredSize()
    {
    return getSize();
    }
    public Dimension getSize()
    {
    return new Dimension(WIDTH,HEIGHT);
    }

    public Dimension getMaximumSize()
    {
    return getSize();
    }

    public Dimension getMinimumSize()
    {
    return getSize();
    }
    }
    Mark Space, Oct 5, 2007
    #1
    1. Advertising

  2. Mark Space

    Eric Sosman Guest

    Mark Space wrote:
    > Hey all, here's a problem I can't lick.
    > [...]
    > I implement all the size methods, [...]


    Are you sure?

    > [...]
    > public Dimension getPerferredSize()

    ^^

    Are you *really* sure?

    --
    Eric Sosman
    lid
    Eric Sosman, Oct 5, 2007
    #2
    1. Advertising

  3. Mark Space

    Mark Space Guest

    Eric Sosman wrote:
    > Mark Space wrote:
    >> Hey all, here's a problem I can't lick.
    >> [...]
    >> I implement all the size methods, [...]

    >
    > Are you sure?
    >
    > > [...]
    >> public Dimension getPerferredSize()

    > ^^
    >
    > Are you *really* sure?
    >


    Thanks man. Sometimes I just need a second pair of eyes...
    Mark Space, Oct 5, 2007
    #3
  4. Mark Space

    Stefan Ram Guest

    Stefan Ram, Oct 5, 2007
    #4
  5. Mark Space

    Mark Space Guest

    Stefan Ram wrote:
    > Mark Space <> writes:
    >>>> public Dimension getPerferredSize()
    >>> ^^
    >>> Are you *really* sure?

    >> Thanks man. Sometimes I just need a second pair of eyes...

    >
    > Try
    >
    > http://download.java.net/jdk7/docs/api/java/lang/Override.html
    >


    That's a good idea too. But because it was such a short little program,
    I skipped them. Sometimes skipping the fundamentals just doesn't pay.
    Mark Space, Oct 5, 2007
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    1
    Views:
    572
    John Timney \(MVP\)
    Jun 19, 2006
  2. jakester
    Replies:
    3
    Views:
    1,824
    jakester
    Apr 3, 2007
  3. padma
    Replies:
    0
    Views:
    348
    padma
    Oct 3, 2007
  4. Sam Takoy
    Replies:
    8
    Views:
    336
    John B. Matthews
    Jun 10, 2010
  5. Replies:
    2
    Views:
    413
    markspace
    Aug 27, 2012
Loading...

Share This Page