我有一个带有 Canvas 的 jFrame。当我在 Windows XP/Vista 中运行我的程序并调整窗口大小时,画布会与窗口一起按比例调整大小。
但是,在 Ubuntu linux 中,当我编译相同的 java 应用程序并调整窗口大小时,Canvas 的大小保持不变。
在 Windows 和 Linux 中,我需要做什么才能使 Canvas 与我的窗口一起调整大小?与差异有什么关系?
主.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 的大小?请记住,当我编译这个 java 程序并在 Windows 中运行它时,它可以很好地调整大小。只有在 linux 中它才会对我这样做。如果重要的话,我也在运行 Java 6 Sun 1.6.0.10 JVM。
替代文字 http://img158.imageshack.us/img158/7642/screenshotww0.png
也许我的画布正在通过我的BufferStrategy/Graphics不调整大小来调整大小?
编辑 2:从截图来看,它肯定设置为 CENTER:
frame.getContentPane().add(ballCanvas, BorderLayout.CENTER);
frame.getContentPane().add(controlPanel, BorderLayout.SOUTH);
解决
显然“画布”正在调整大小,但我用它的缓冲策略做了一些奇怪的事情,它不允许调整 IT 的大小。我修好了它。感谢大家!