首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本Java图形和坐标不能正常工作

基本Java图形和坐标不能正常工作
EN

Stack Overflow用户
提问于 2012-11-14 18:15:41
回答 2查看 1.5K关注 0票数 0

我过去在acm图形库方面做了相当多的工作,我刚刚开始解决斯坦福布置的突破性问题。我在过去几次遇到的图形问题之一是坐标不能准确地反映形状实际出现的位置,尽管我已经反复检查过它们。最后,对于这些任务,我最终看了看它,并进行了修改,直到它看起来像是正确的。很明显,我在这里遗漏了一些东西,因为一个简单的图形程序应该不会这么难。

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

代码语言:javascript
复制
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个像素(basic 2b+x =1 side,2a+y= vertical side)。你可能会认为这会在每边创建一个5像素的黑色边框,中间有一个白色的正方形,但事实并非如此,它在窗口的左侧、右侧和顶部创建了一个边框,而不是底部。那么,对于这么简单的事情,会出什么问题呢?我在纸上检查了两倍,三倍,甚至四倍的计算,它应该是一个中间有5个像素黑色边框的白色正方形,但它不是,我试着改变像素的百分比,但效果更差。手动编辑该框,直到Y值接近-35,尽管这有点太远了。有人知道哪里出问题了吗?

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

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-14 18:40:46

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

您的窗口具有:

  • 由操作系统提供的边框。它的内部是400x600。
  • 菜单栏。
  • 菜单栏下面的可绘制区域(画布)。它的菜单栏宽度小于400x600。

你要么

  • 需要读取画布大小并使用它来代替窗口大小:getCanvas().getHeight()
  • need来设置画布大小而不是窗口大小,并让窗口根据需要自行调整大小。由于GraphicsProgram是一个Applet,这似乎不是找出菜单高度并按该数量增加窗口高度(最后的手段)。
票数 2
EN

Stack Overflow用户

发布于 2012-11-14 21:23:23

可以使用setSize()方法更改窗口的大小。这样做,你仍然面临着一个坐标问题。

您只需在调用setSize()时处理它。

OFFI也在处理这个突破性的任务,也有同样的问题。几分钟前发布在此站点。/OFF

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

https://stackoverflow.com/questions/13376840

复制
相关文章

相似问题

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