Намерение
У меня есть 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
изменяет размер правильно. Вот как это выглядит.
![enter image description here](https://i.stack.imgur.com/8AApg.png)
Распечатки тоже в порядке - см. Нижнюю часть сообщения.
Код
Это мой код:
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
на всякий случай, если позиция была смещена к верхнему левому углу. Это просто сместило круг - клип сохранился.
Я что-то упустил?