Sign in to follow this  
Nicholas Kong

Which prefer layout would help my game canvas?

Recommended Posts

Nicholas Kong    1535

So I ran into some rather interesting problems. I have been playing around with the same three layouts that I learned in my introductory java course last year: BorderLayout, FlowLayout and GridLayout for a good hour in the game I have been developing for the past month.

 

None of the three layouts are very nice to my game canvas. The reason, is the right-half portion of the game canvas gets obscured which I also do not know how to solve. I think the one layout that did the least amount of damage to my game canvas out of the three is BorderLayout which is the one depicted in this picture below. Although, from a user standpoint, you can see BorderLayout still hurts the gameplay experience of my arcade shooter clone.

 

The heart image and the life image are both JLabel objects. The middle is the game canvas(from what I seen BorderLayout seems to have messed up my game canvas). The source code is posted at the bottom-most. 

 

I know I am doing this wrong but I think I struggle enough. mellow.png  Perhaps I need to use a layout I have not been taught? rolleyes.gif

 

Here is what the game looks if it uses BorderLayout:

javaLayout_zps51059ee0.jpg

 

If my game canvas was left alone with no layout it would look nice like this:

javaBorderLayout_zpsd87ea07a.jpg

 

public class Game extends Canvas{

 

     private JPanel panel;

 

     private Game(){

 

     panel = (JPanel)container.getContentPane();

        
        panel.setPreferredSize(new Dimension(width,height));
 
        panel.setLayout(new BorderLayout());
        // add canvas to panel
        panel.add(this,BorderLayout.CENTER);
        
        ShipLifeTitle shipLifeTitle = null;
        try {
            shipLifeTitle = new ShipLifeTitle();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        panel.add(shipLifeTitle,BorderLayout.EAST);
        
        ShipLifeHeart shipLifeHeart = null;
        try{
            shipLifeHeart = new ShipLifeHeart();
        }catch(IOException e)
        {
            e.printStackTrace();
        }
        
        panel.add(shipLifeHeart,BorderLayout.WEST);
        
        //shipLifeTitle.setPreferredSize(new Dimension(shipLifeTitle.getImage().getWidth(null),shipLifeTitle.getImage().getHeight(null)));
        //panel.add(shipLifeTitle.getImage(),BorderLayout.SOUTH);
 
                
        container.setLocation(300, 200);
        setBounds(0,0,width,height);
        container.pack();
        
        
        container.setResizable(false);
        container.setVisible(true);
 

 

     }

 

}

 

 

public class ShipLifeTitle extends JLabel {
 
    public ShipLifeTitle() throws IOException{
        ImageIcon icon = new ImageIcon("src/Ship/shipLifeTitle.png");
        setIcon(icon);
    }
}
 
public class ShipLifeHeart extends JLabel {
 
    public ShipLifeHeart() throws IOException{
        ImageIcon icon = new ImageIcon("src/Ship/shipLifeHeart.png");
        setIcon(icon);
        
    }
}
 
Edited by warnexus

Share this post


Link to post
Share on other sites
Barzai    668

Here's a link to the layout tutorial that the Oracle folks made:

http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

 

They recommend just using netbeans.  I haven't actually used that yet, so I don't know how effective it is.  Otherwise they recommend grouplayout or gridbaglayout.

 

Personally I've had a lot of luck with BoxLayout.  BoxLayout tends to prefer to support the default sizes of components, so it doesn't do some of the weird resizing things some of the other layout setups do.  To get more intricate layouts, though, you have to make yourself a hierarchical box structure.  That's actually sort of the way I tend to set stuff up when I code javascript as well, though, so it flows pretty naturally for me.

 

Good luck

 

*Edit part*

I just had a thought.  It might work out well for what you're making to just move your UI display stuff into your canvas.  Then you wouldn't need to bother with the layout managers at all.

Edited by Barzai

Share this post


Link to post
Share on other sites
Nicholas Kong    1535

Here's a link to the layout tutorial that the Oracle folks made:

http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

 

They recommend just using netbeans.  I haven't actually used that yet, so I don't know how effective it is.  Otherwise they recommend grouplayout or gridbaglayout.

 

Personally I've had a lot of luck with BoxLayout.  BoxLayout tends to prefer to support the default sizes of components, so it doesn't do some of the weird resizing things some of the other layout setups do.  To get more intricate layouts, though, you have to make yourself a hierarchical box structure.  That's actually sort of the way I tend to set stuff up when I code javascript as well, though, so it flows pretty naturally for me.

 

Good luck

 

*Edit part*

I just had a thought.  It might work out well for what you're making to just move your UI display stuff into your canvas.  Then you wouldn't need to bother with the layout managers at all.

Thanks for the link. I got it to work!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this