Намерение
У меня есть java.applet.Applet
подкласс MyApplet
с добавленным java.awt.Canvas
подклассом MyCanvas
.
Мой код изменяет размер MyApplet
на new Dimension(600,400)
и изменяет размер MyCanvas
для соответствия.
Когда MyCanvas
равен paint
ed, он должен
- заполните всю область красным
- Нарисуйте синий круг шириной 300 и высотой 300.
Задача
Вместо этого (при запуске в виде Java-апплета из Eclipse) краска MyCanvas
обрезается до гораздо меньшей области, чем 600 400 (я измерил ее равной 195 200), даже если MyApplet
изменяет размер правильно. Вот как это выглядит.
Распечатки тоже в порядке - см. Нижнюю часть сообщения.
Код
Это мой код:
import java.applet.Applet;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
public class MyApplet extends Applet {
Canvas mainCanvas;
public void init() {
// Set the size of the applet
setSize(600, 400);
// Print dimensions
System.out.println("Applet dimensions: " + getSize());
// Make a canvas with the same sizes as this applet
mainCanvas = new MyCanvas(getWidth(), getHeight());
add(mainCanvas);
}
public class MyCanvas extends Canvas {
public MyCanvas(int w, int h) {
setSize(w, h);
System.out.println("Canvas dimensions: " + getSize());
}
public void paint(Graphics g) {
g.setColor(Color.RED);
System.out.println("Canvas dimensions when painting: " + getSize());
g.fillRect(0, 0, getWidth(), getHeight());
}
}
}
Отпечатки
Создает следующую распечатку:
Applet dimensions: java.awt.Dimension[width=600,height=400]
Canvas dimensions: java.awt.Dimension[width=600,height=400]
Canvas dimensions when painting: java.awt.Dimension[width=600,height=400]
Canvas dimensions when painting: java.awt.Dimension[width=600,height=400]
Размеры правильные во всем!
Попытки решения
- Я попытался
setBounds()
вместо setSize()
в MyApplet
и MyCanvas
на всякий случай, если позиция была смещена к верхнему левому углу. Это просто сместило круг - клип сохранился.
Я что-то упустил?