我正在写一个蛇游戏,但是有一个小问题。有时面板和框架之间有一点间隙。我真的不知道这可能是什么问题,因为它看起来如此不规律。
的 SSCCE:
public class Game {
static JFrame frame = new JFrame("The Snake Game");
static Game game = new Game();
JPanel cards;
static JPanel card1 = new JPanel();
private Game() {
}
public void addComponentToPane(Container pane) {
// CARD 1
card1.setLayout(null);
card1.setPreferredSize(new Dimension(600, 625));
CardLayout cl = new CardLayout();
cards = new JPanel(cl);
cards.add(card1);
pane.add(cards, BorderLayout.CENTER);
}
private static void createAndShowGUI() {
game.addComponentToPane(frame.getContentPane());
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
} // end of main
}
答案 0 :(得分:2)
请在致电setResizable
pack
出于某种原因,从另一个方面来看,似乎在宽度和高度上增加了大约10-20个像素。
如果不起作用,请在框架可见后调用setResizable
答案 1 :(得分:1)
我今天遇到同样的问题。经过一段谷歌搜索,我找不到任何好的答案。库巴给出了一个很好的暗示,问题终于得到了解决。我想这个问题是由setResizable(false)函数的延迟引起的,因此它偶尔会发生。我的解决方案是在调用setResizable后添加一个短暂的保持。
setResizable(false);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
好的,我知道这是一种令人作呕的方法。但在问题JFrame isResizable(false) sizing issue中说:“您可以在调用JFrame#pack
”后通过电话JFrame#setResizable
重置它。所以我想,为什么不重置两次?!
代码:
private static void createAndShowGUI() {
game.addComponentToPane(frame.getContentPane());
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
if(frame.getContentPane().getWidth() > 600){
frame.pack();
}
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
当宽度大于我的首选大小时,第二次调用方法pack()
似乎可以解决问题。