階層化されたペインでゲームを実装する作業を行っていますが、レイアウトの問題が発生しています。何らかの理由で、何も正しく整列しません。フレームの上部に空白ができてしまい、フレームがすべてに合うように正しいサイズに拡張されることはありません。以前に(レイヤードペインなしで)それをやったので、frame.pack()を試しましたが、それもうまくいかないようです。
誰かが私を助けることができれば、私はそれを感謝します. 小さな何かが欠けているような気がします。
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();
}