I'm working on implementing a game in layered panes and i'm running into some layout issues. For some reason, nothing lines up correctly. I end up with a white space at the top of my frame and the frame never extends out to the correct size to fit everything. I've tried frame.pack() because I've done that before (without layeredpanes) but that doesn't seem to work either.
If anybody could help me out, I'd appreciate it. I have a feeling there is something small that I'm missing.
public class gameGUI extends JFrame{
//set up all the variables that will be used in the gameGUI
static int skyWidth = 1024;
static int skyHeight = 120;
static int sidebarWidth = 120;
static int sidebarHeight = 480;
static int boardWidth = 904;
static int boardHeight = 480;
private JLayeredPane pane = new JLayeredPane();
public static YardDriver thisDriver;
public static int getScreenWidth(){return boardWidth;}
public static int getScreenHeight(){return boardHeight;}
public JLayeredPane getPane(){
return pane;
}
//Convert the width of the screen to work with the gui
public int convertX(int rainLoc,BufferedImage img){
int x = rainLoc % 30;
return ((boardWidth-img.getWidth())*x) / YardDriver.getScreenWidth();
}
//Convert the height of the screen to work with the gui
public int convertY(int rainLoc, BufferedImage img){
int y = (rainLoc - (rainLoc % 30)) / 30;
return ((boardHeight-img.getHeight())*y) / YardDriver.getScreenWidth();
}
//Convert the screen to the board
public static int convertStoB(Point screenLoc){
int y = ((screenLoc.y - skyHeight) * YardDriver.getScreenHeight())/boardHeight;
int x = ((screenLoc.x - sidebarWidth) * YardDriver.getScreenWidth())/boardWidth;
return x + y*YardDriver.getScreenWidth();
}
private void loadAll() {
}
public gameGUI() {
loadAll();
JPanel timer = new JPanel();
//place the image in a jlabel and set bounds
timer.add(sky);
//Set preferredsize, border, and set opaque
timer.setPreferredSize(new Dimension(skyWidth,skyHeight));
timer.setBounds(0, 0, skyWidth, skyHeight);
timer.setOpaque(true);
timer.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));
JPanel sidebar = new JPanel();
sidebar.setBounds(0, skyHeight, sidebarWidth, sidebarHeight);
JButton nativeOne = new JButton();
JButton nativeTwo = new JButton();
JButton nativeThree = new JButton();
JButton exoticOne = new JButton();
JButton exoticTwo = new JButton();
JButton exoticThree = new JButton();
//Set the preferredsize and set a border
sidebar.setLayout(new GridLayout(6, 1));
sidebar.setPreferredSize(new Dimension(sidebarWidth, sidebarHeight));
//Add each button to the sidebar
sidebar.add(nativeOne);
sidebar.add(nativeTwo);
sidebar.add(nativeThree);
sidebar.add(exoticOne);
sidebar.add(exoticTwo);
sidebar.add(exoticThree);
sidebar.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));
JPanel board = new gamePanel(this);
board.setBounds(sidebarWidth, skyHeight, boardWidth, boardHeight);
board.setPreferredSize(new Dimension(904, 480));
board.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));
timer.setVisible(true);
sidebar.setVisible(true);
board.setVisible(true);
pane.add(timer, new Integer(1));
pane.add(sidebar, new Integer(1));
pane.add(board, new Integer(1));
pane.setBounds(0,0,1024, 600);
setTitle("Storm Watch");
setSize(1024, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Pack the frame and set it to visible
setVisible(true);
setContentPane(pane);
}
public static void main(String[] args){
//Create a new frame with the createAndShowGUI
JFrame frame = new gameGUI();
}