对于我的CS11类,我必须编写一个小applet,它在屏幕上绘制一条在画布中间相交的水平线和垂直线。分配的一部分是,当用户单击线并执行拖动时,能够移动一行或两线。这一部分正在发挥作用。
第二部分涉及处理窗口大小调整。如果调整了窗口的大小,则需要调整这两条线,使它们从窗口的边缘延伸到另一边缘。
我们的指令希望我们使用Java小程序查看器而不是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或者其他的东西有关。我这么说是因为讲师说当你调整窗口大小时,画布也应该自动调整大小。
下面是代码的一部分,你可以看到我在做什么:
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发布于 2012-10-20 13:26:48
非常奇怪,但是Java JDK似乎在某些窗口管理器上有问题。意外地找到了解决方案。JFrame's position and pack() in Awesome WM
https://stackoverflow.com/questions/12985419
复制相似问题