Работя върху внедряването на игра в слоести панели и се натъквам на някои проблеми с оформлението. По някаква причина нищо не се подрежда правилно. В крайна сметка получавам бяло пространство в горната част на моята рамка и рамката никога не се разширява до правилния размер, за да пасне на всичко. Опитах 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();
}
JLayeredPane
, който по памет игнорира всички указания за размера на съдържанието (или поне няма мениджър на оформление по подразбиране). - person Andrew Thompson   schedule 15.11.2012ImageIO.read(new File("images/Raindrop.png"));
Не е свързано с непосредствения проблем, но по време на внедряването това вероятно ще бъде вграден ресурс, който ще да бъде достъпен само чрез. URL адрес. Вижте Wiki за маркери за вградени ресурси за това как да формиратеURL
. - person Andrew Thompson   schedule 15.11.2012CardLayout
, за да превключвате между групите.LayeredPane
е над убийството - IMHO - Това е добър избор за небето и борда, но не и за останалата част от играта... - person MadProgrammer   schedule 15.11.2012