java - 基本 Java 图形和坐标无法正常工作

标签 java graphics applet breakout acm-java-libraries

我过去已经对 acm 图形库做了很多工作,并且刚刚开始研究斯坦福大学分配的突破问题。我过去多次遇到的图形问题之一是坐标并不能准确反射(reflect)形状实际出现的位置,尽管我已经对它们进行了两次和三次检查。最后,对于这些作业,我最终目视并进行修改,直到看起来合适为止。很明显我在这里遗漏了一些东西,因为一个简单的图形程序不应该这么困难。

例如,使用 acm.graphics 我的代码如下所示。

public static final int APPLICATION_WIDTH = 400;
public static final int APPLICATION_HEIGHT = 600;

public void setupBorder(){
    // **Sets Black Background
    GRect b = new GRect(0,0,400,600);  //** Sets Black Background
    fillObj(b,Color.black);
    add(b);

    //**Sets White Square so border is 5 pixels wide on each side
    b = new GRect(5,5,APPLICATION_WIDTH-10,APPLICATION_HEIGHT-10);
    fillObj(b,Color.white);
    add(b);
    }

所以我在这里的想法是,它向右移动 5 个像素,向下移动 5 个像素,我需要减去这些像素,然后再减去 5 个像素,以便每边都有 5 个像素的边框(基本 2b+x = 1 边,2a+y = 垂直边)。您可能会认为这会创建一个每边 5 个像素的黑色边框,中间有一个白色方 block ,但事实并非如此。它在窗口的左侧、右侧和顶部创建边框,但不在底部创建边框。那么这么简单的事情,可能会出什么问题吗?我已经两次、三次甚至四次检查了纸上的计算结果,它应该是中间有一个带有 5 像素黑色边框的白色正方形,但事实并非如此。我尝试过更改像素的百分比,但效果更差。手动编辑该框,直到它看起来接近 Y 值约 -35,尽管这有点太远了。有人知道出了什么问题吗?

appwindow

Breakout对类中的 run 和其他方法进行了这些更改。

public void run() {
    /* You fill this in, along with any subsidiary methods */
    init();
}

public void init(){

    setupBorder();


}

public void setupBorder(){
    //**Black Background
    GRect b = new GRect(0,0,400,600);  //**Black Background
    fillObj(b,Color.black);
    add(b);

    b = new GRect(5,5,APPLICATION_WIDTH-10,APPLICATION_HEIGHT-10);
    fillObj(b,Color.white);
    add(b);
}

public void fillObj(GFillable a, Color argC)
{
    a.setFillColor(argC);
    a.setFilled(true);
}

最佳答案

看起来您混淆了应用程序窗口的大小(不包括窗口边框,但包括菜单,在您的情况下为 400*600)与可绘制区域的大小(不包括菜单),这意味着您正在可绘制区域(位于菜单下方)之外进行绘画。

您的窗口有:

  • 由操作系统提供的边框。内部尺寸为 400x600。
  • 菜单栏。
  • 菜单栏下方的可绘制区域( Canvas )。它比菜单栏宽度短 400x600。

你要么

  • 需要读取 Canvas 大小并使用它来代替窗口大小:getCanvas().getHeight()
  • 需要设置 Canvas 大小而不是窗口大小,并让窗口大小根据需要自行调整。由于 GraphicsProgram 是一个 Applet,这似乎不可能。
  • 需要找出菜单高度并将窗口高度增加相应的高度(最后的手段)。

关于java - 基本 Java 图形和坐标无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13376840/

相关文章:

java - 无需xml文件即可与MyBatis连接数据库

iphone - 创建 iPhone UI 元素

java - 为什么每次重绘时我的小程序都会闪烁?

java - 在网页上获取 Netbeans Applet

java - 从 Java/SQL 文件中提取 SQL 语句

java - 用 Java 打印强制打印 HTML 的侵入性最小的方法?

java - 从 Java 调用 PHP

Javascript Canvas 像素格式

java - Swing repaint() 在循环或线程中不起作用

java - 如何更新小程序的缓存?