首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整appletviewer窗口大小时,画布大小不变

调整appletviewer窗口大小时,画布大小不变
EN

Stack Overflow用户
提问于 2012-10-20 13:01:17
回答 1查看 1.8K关注 0票数 0

对于我的CS11类,我必须编写一个小applet,它在屏幕上绘制一条在画布中间相交的水平线和垂直线。分配的一部分是,当用户单击线并执行拖动时,能够移动一行或两线。这一部分正在发挥作用。

第二部分涉及处理窗口大小调整。如果调整了窗口的大小,则需要调整这两条线,使它们从窗口的边缘延伸到另一边缘。

我们的指令希望我们使用Java小程序查看器而不是web浏览器来启动程序,以便在程序运行时可以调整窗口大小。我们被告知使用下面的.html文件。

ResizableBallController.html

代码语言:javascript
复制
<html>
  <body>
    <applet
      code="ResizableBallController.class"
      archive="objectdraw.jar"
      width="500"
      height="500">
    </applet>
  </body>
</html>

当我运行程序并调整窗口大小时,画布区域仍然固定在500x500像素,即使我将窗口变大,放大的区域也是灰色的。根据我的指导老师的说法,画布应该自动调整以从新调整大小的窗口的边缘延伸到另一个边缘。

为了测试这个问题,我重载了paint方法来添加一条System.out.println消息,这样我就可以看到它被调用的频率,并且它似乎只在程序启动时调用该方法。

我想知道这是不是和Awesome或者其他的东西有关。我这么说是因为讲师说当你调整窗口大小时,画布也应该自动调整大小。

下面是代码的一部分,你可以看到我在做什么:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-20 13:26:48

非常奇怪,但是Java JDK似乎在某些窗口管理器上有问题。意外地找到了解决方案。JFrame's position and pack() in Awesome WM

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12985419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档