我知道这类问题过去已得到部分回答,但由于类似职位中的回答都无法满足我的需求,因此我的情况似乎是一个例外。
我正在使用swing和java创建一个益智游戏。
我的程序从“ IntroMenu”开始,然后通过按钮打开“ MainMenu”,其中的功能为:“开始游戏”,“暂停游戏”。
当按下“开始游戏”时,将打开一个新的GameWindow,在其中实例化我的“ GameBoard”。
GameBoard类如下。(部分代码),因为这是问题所在(测试后得出此结论)。
public void gameBoardFill() {
List<String> flag = Arrays.asList("OrthogParalilogramo", "Tetragono", "Trigono", "Kiklos", "Romvos", "Joker"); //List containing all the posible types of Tiles
int ctr = -1; //keeping track of the index value of 'flag' array. Avoiding 'OutOfBound Exception'.
//For every line in the GameBoard
for (int i = 0; i < rows; i++) {
/**
* Counter increments by 2 cause we need pairs of Tiles. "1" AND "2"
* is a reference to the kind of graphics to be drawn on the Tile,
* we have 2 different styles.
*/
for (int j = 0; j < cols; j += 2) {
ctr++;
switch (flag.get(ctr)) {
case "OrthogParalilogramo":
board.get(i).add(j, new OrthogParalilogramo(i, j, "1"));
board.get(i).add(j + 1, new OrthogParalilogramo(i, j + 1, "2"));
break;
case "Tetragono":
board.get(i).add(j, new Tetragono(i, j, "1"));
board.get(i).add(j + 1, new Tetragono(i, j + 1, "2"));
break;
case "Trigono":
board.get(i).add(j, new Trigono(i, j, "1"));
board.get(i).add(j + 1, new Trigono(i, j + 1, "2"));
break;
case "Kiklos":
board.get(i).add(j, new Kiklos(i, j, "1"));
board.get(i).add(j + 1, new Kiklos(i, j + 1, "2"));
break;
case "Romvos":
board.get(i).add(j, new Romvos(i, j, "1"));
board.get(i).add(j + 1, new Romvos(i, j + 1, "2"));
break;
case "Joker":
board.get(i).add(j, new Joker(i, j, "1"));
board.get(i).add(j + 1, new Joker(i, j + 1, "2"));
break;
default:
System.out.println("Error filling all cells");
break;
}
board.get(i).get(j).setAlignmentX(20 * (i % rows)); //X,Y Allignment
board.get(i).get(j).setAlignmentY(20 * (i / rows));
board.get(i).get(j + 1).setAlignmentX(20 * (i % rows));
board.get(i).get(j + 1).setAlignmentY(20 * (i / rows));
GameWindow.root.add(board.get(i).get(j)); // adding the buttons to Jpanel of GameWindow
GameWindow.root.add(board.get(i).get(j + 1));
if (ctr == flag.size() - 1) { //keeps the ctr in the proper limits so we dont get nullException
ctr = 0;
}
//TEST System.out.println(board.get(i).get(j));
}
}
}
在通过静态Jpanel变量(GameWindow类的拥有者)之后,通过将按钮逐个添加到板上,还设置了一些对齐方式,从而成功地在板上填充了按钮。
问题是在我的GameWindow中什么都没有出现,一切都是白色的。
经过一些测试(将jpanel涂成红色)作为背景,我发现在用按钮填充板阵列之后,jpanel变成空白白色,并且“ setAlignment”和“ add to Jpanel”对此没有影响。
这是GameWindow代码:
public class GameWindow {
private final JFrame frame;
private JMenuBar menuBar;
public static JPanel root; //bad programming but works for testing atm.
//Constructor
public GameWindow() {
frame = new JFrame();
frame.setTitle("GameWindow");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
//menu generate method
generateMenu();
frame.setJMenuBar(menuBar);
//pane with null layout
root = new JPanel();
root.setPreferredSize(new Dimension(800, 600));
root.setBackground(Color.red); //test
root.setLayout(new GridLayout());
frame.add(root);
frame.pack();
frame.setVisible(true);
}
//method for generate menu
public void generateMenu() {
menuBar = new JMenuBar();
JMenu file = new JMenu("File");
JMenu tools = new JMenu("Tools");
JMenu help = new JMenu("Help");
JMenuItem open = new JMenuItem("Open ");
JMenuItem save = new JMenuItem("Save ");
JMenuItem exit = new JMenuItem("Exit ");
JMenuItem preferences = new JMenuItem("Preferences ");
JMenuItem about = new JMenuItem("About ");
file.add(open);
file.add(save);
file.addSeparator();
file.add(exit);
tools.add(preferences);
help.add(about);
menuBar.add(file);
menuBar.add(tools);
menuBar.add(help);
}
/**
*
*/
public void GameView() {
GameBoard GB = GameBoard.getInstance();
GB.PlayGame();
}
} 我知道,如果没有完整的项目代码,很难理解可能的错误,但是由于有很多类,因此我不确定如何构造这个问题。
如果需要,很高兴分享任何更多信息。不讨厌。圣诞快乐 ;)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。