对于我的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
答案 0 :(得分:0)
非常奇怪,但Java JDK似乎与某些窗口管理器有问题。意外发现了一个解决方案。 JFrame's position and pack() in Awesome WM