对于我的 CS11 课程,我必须编写一个小程序,在屏幕上绘制一条横线和竖线,并在画布中间相交。任务的一部分是当用户单击一条线并执行拖动时能够移动一条或两条线。那部分正在工作。
第二部分涉及处理窗口大小调整。如果窗口被调整大小,则需要调整两条线,使它们从窗口的边缘延伸到边缘。
我们的指令希望我们使用 Java appletviewer 而不是 Web 浏览器来启动程序,以便在程序运行时可以调整窗口大小。我们被告知使用以下 .html 文件。
ResizableBallController.html
<html>
<body>
<applet
code="ResizableBallController.class"
archive="objectdraw.jar"
width="500"
height="500">
</applet>
</body>
</html>
当我运行程序并调整窗口大小时,画布区域保持固定在 500x500 像素,即使我使窗口更大,并且扩大的区域充满了灰色。根据我的导师的说法,画布应该自动调整以从新调整大小的窗口的边缘延伸到边缘。
为了测试这个问题,我重载了paint
方法来添加一条System.out.println
消息,这样我就可以看到它被调用的频率,并且它出现的唯一一次调用方法是在程序启动时。
我想知道这是否与 Awesome Window Manager 或其他什么有关。我这样说是因为教练说当你调整窗口大小时,画布也应该自动调整大小。
这是代码的一部分,因此您可以看到我在做什么:
import objectdraw.*;
import java.awt.*;
public class ResizableBallController extends WindowController
{
// Canvas separators
private Line xAxis,
yAxis;
boolean xAxisGrabbed,
yAxisGrabbed;
public void begin()
{
int canvasWidth = canvas.getWidth(),
canvasHeight = canvas.getHeight(),
canvasHorizontalMidPoint = canvasWidth / 2,
canvasVerticalMidpoint = canvasHeight / 2;
xAxis = new Line(0, canvasVerticalMidpoint,
canvasWidth, canvasVerticalMidpoint,
canvas);
yAxis = new Line(canvasHorizontalMidPoint, 0,
canvasHorizontalMidPoint, canvasHeight,
canvas);
}
public void onMousePress(Location p)
{
xAxisGrabbed = xAxis.contains(p);
yAxisGrabbed = yAxis.contains(p);
}
public void onMouseDrag(Location p)
{
if (xAxisGrabbed)
{
xAxis.moveTo(0, p.getY());
}
if (yAxisGrabbed)
{
yAxis.moveTo(p.getX(), 0);
}
}
public void paint(java.awt.Graphics g)
{
super.paint(g);
System.out.println("paint called");
}
} // End of public class ResizableBallController extends WindowController