java - 调整 appletviewer 窗口大小时, Canvas 大小不会改变

标签 java linux applet awesome-wm appletviewer

对于我的 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/

相关文章:

java - 如何将ArrayList转换为JList对象? java

java - ArrayBlockingQueue 中类型为 Runnable 的毒丸

linux - Shell 脚本中的定时异步任务

java - 在线教育游戏 - 用 Ja​​va 编写

java - 客户端服务器消息加密

c - 在 Linux 中确定扇区大小的便携方法

c - 从用户级别禁用键盘设备

java - 为什么我的宇宙飞船没有出现?

java - 托管签名 jar 时的安全注意事项

java - HttpSession中的信息过多