У меня есть jFrame с Canvas на нем. Когда я запускаю свою программу в Windows XP / Vista и изменяю размер окна, холст пропорционально изменяется вместе с окном.
Однако в Ubuntu Linux, когда я компилирую то же Java-приложение и изменяю размер окна, Canvas остается того же размера.
Что мне нужно сделать, чтобы изменить размер Canvas в 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
Я сделал предложения, сделанные Дейвом Рэем, и он до сих пор не меняет размеры холста? Помните, что для меня это нормально, когда я компилирую эту 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);
Решено
Видимо, размер "Canvas" менялся, но я делал что-то странное с его буферной стратегией, которая не позволяла изменять размеры ИТ. Я починил это. Спасибо всем!