我有一个带有画布的jFrame。在Windows XP/Vista中运行程序并调整窗口大小时,画布会与窗口成比例地调整大小。
然而,在Ubuntu Linux中,当我编译同样的Java应用程序并调整窗口大小时,画布保持相同的大小。
我需要怎么做才能使我的画布在Windows和Linux中随着窗口一起调整大小?这种差异是什么原因导致的?
Main.java
public class Main {
public static void main(String[] args)
{
JFrame frame = new JFrame("BallBounce");
frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.Y_AXIS));
BallCanvas ballCanvas = new BallCanvas();
frame.getContentPane().add(ballCanvas);
frame.getContentPane().add(controlPanel);
frame.pack();
frame.setVisible(true);
}
}
BallCanvas.java
public class BallCavnas extends Canvas {
public BallCanvas()
{
setPreferredSize(new Dimension(640, 400));
setIgnoreRepaint(true);
... various gui controls are wired up here
}
... rest of canvas code
}
编辑:我的源代码已经被压缩在这里,如果有人想看一下:
http://www.filedropper.com/ballbounce
我已经按照Dave Ray的建议进行了更改,但Canvas仍然不能调整大小?请记住,当我编译并在Windows上运行此java程序时,它可以正常调整大小。只有在Linux中才会出现这种情况。我正在运行Java 6 Sun 1.6.0.10 JVM,如果有用的话。
alt text http://img158.imageshack.us/img158/7642/screenshotww0.png
也许我的Canvas正在调整大小,但BufferStrategy/Graphics没有调整大小?
编辑2:从屏幕截图来看,它明确设置为CENTER:
frame.getContentPane().add(ballCanvas, BorderLayout.CENTER);
frame.getContentPane().add(controlPanel, BorderLayout.SOUTH);
已解决
显然“Canvas”正在被调整大小,但我在处理其缓冲策略方面做了一些奇怪的事情,这不允许它被调整大小。我已经修复了它。谢谢大家!