Which prefer layout would help my game canvas?

Started by
2 comments, last by Barzai 11 years, 2 months ago

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);
}
}
Advertisement

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.

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!

Hooray! Glad to help.

Cheers

This topic is closed to new replies.

Advertisement