对于我的 CS11 类(class),我必须编写一个小小程序,用于在屏幕上绘制一条在 Canvas 中间相交的水平线和垂直线。分配的一部分是当用户单击一行并执行拖动时能够移动一条或两条线。该部分正在工作。
第二部分涉及处理窗口大小调整。如果调整窗口大小,则需要调整两条线,以便它们从窗口的边缘延伸到窗口的边缘。
我们的说明希望我们使用 Java appletviewer 而不是 Web 浏览器来启动程序,以便在程序运行时可以调整窗口大小。我们被告知使用以下 .html 文件。
可调整大小的BallController.html
<html>
<body>
<applet
code="ResizableBallController.class"
archive="objectdraw.jar"
width="500"
height="500">
</applet>
</body>
</html>
当我运行程序并调整窗口大小时, Canvas 区域保持固定在 500x500 像素,即使我使窗口更大,并且放大的区域填充有灰色。根据我的导师的说法, Canvas 应该自动调整以从新调整大小的窗口的边缘延伸到边缘。
为了测试这个问题,我重载了 paint
方法来添加 System.out.println
消息,这样我就可以看到它被调用的频率,而且似乎唯一一次调用该方法的时间是在程序启动时。
我想知道这是否与 Awesome Window Manager 或其他东西有关。我这样说是因为老师说当你调整窗口大小时, Canvas 也应该自动调整大小。
这是代码的一部分,以便您可以看到我在做什么:
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
最佳答案
很奇怪,但是Java JDK似乎对某些窗口管理器有问题。无意中找到了解决办法。 JFrame's position and pack() in Awesome WM
关于java - 调整 appletviewer 窗口大小时, Canvas 大小不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12985419/