0
我正在实现分层窗格中的游戏,我遇到了一些布局问题。出于某种原因,没有正确排列。我最终在我的框架顶部留出了一个空白区域,并且框架永远不会扩展到正确的大小以适合所有内容。我已经尝试过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();
}
啊!代码太多!你能提供一个SSCCE吗? http://www.sscce.org – Doorknob
@PicklishDoorknob这些图片也是制作[SSCCE](http://sscce.org/)的一个问题。 OP将需要做一些事情,如a)热点链接到小(以字节为单位)的图像。 b)用代码生成它们。 c)用J2SE组件代替,显示相同的布局问题。 - 这就是说,我怀疑这些问题是由于使用了'JLayeredPane',它从内存中忽略了所有内容大小提示(或者默认情况下至少没有布局管理器)。 –
@AndrewThompson哈哈,每个人总是告诉我使用一个,但当我试图告诉其他人它不起作用:P – Doorknob