Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的标签不沿y轴居中?(见CS106A)_Java_Graphics_Alignment_Acm Java Libraries - Fatal编程技术网

Java 为什么我的标签不沿y轴居中?(见CS106A)

Java 为什么我的标签不沿y轴居中?(见CS106A),java,graphics,alignment,acm-java-libraries,Java,Graphics,Alignment,Acm Java Libraries,我正在尝试使用斯坦福大学的在线CS106A课程学习java。本课程使用来自的acm库软件包 有人能告诉我为什么我下面的代码没有使标签沿y轴居中吗 import acm.program.*; import acm.graphics.*; public class CenterLabel extends GraphicsProgram { public void run() { GLabel text = new GLabel("HELLO!"); text

我正在尝试使用斯坦福大学的在线CS106A课程学习java。本课程使用来自的acm库软件包

有人能告诉我为什么我下面的代码没有使标签沿y轴居中吗

import acm.program.*;
import acm.graphics.*;

public class CenterLabel extends GraphicsProgram {
    public void run() {
        GLabel text = new GLabel("HELLO!");
        text.setFont("Arial-200");
        double cy = (getHeight() / 2) + (text.getAscent() / 2);
        text.setLocation(0, cy);
        add(text);
    }
}
当我运行此程序时,我得到以下信息:

编辑: 另一件让我烦恼的事情是,任务中的示例运行似乎也有相同的对齐问题。(参见下面的链接,Ex3)


如果仔细查看图片,您会发现类框内的标签也没有正确居中?

您可以使用
setBounds
方法将标签定位到所需的位置。它需要四个int参数。e、 g:

text.setBounds(20,20,20,20);

编辑:哦,天哪,我在测试你的代码时输入错误!我无意中减去了这两个值,而不是相加
getAscent()
返回一个负数,表示文本在基线上方上升的像素数,因此正确的位置公式为

double cy = (getHeight() / 2) - (text.getAscent() / 2);
逻辑是相同的,但是
getAscent()
是负数这一事实意味着您必须翻转符号。对不起


在CS106A中,我们通常不会将Java程序作为小程序运行,因为默认的小程序查看器获取的窗口尺寸不正确(即,调用
getWidth()
getHeight()
将产生不正确的结果)。如果您从CS106A网站下载,您将获得一个Eclipse插件,可以将您编写的Java程序作为独立应用程序运行。发生这种情况时,窗口大小和形状实际上是正确的,因此
getWidth()
getHeight()
将报告正确的值

可选地,考虑将以下代码添加到程序:

public static void main(String[] args) {
    new /* name of your class */.start(args);
}
然后可以直接将程序作为Java应用程序而不是小程序运行,这个问题应该得到解决


希望这有帮助

我认为这里的问题是,标签确实被定位了,但它位于错误的位置。谢谢。我知道有办法解决这个问题。但是我真的想知道我做错了什么。我已经在你提供的链接中下载了eclipse,并在我的原始帖子中运行了代码。还是一样的问题。在最初的在线课程中,我还尝试了旧版本的eclipse。这也产生了同样的结果。你能在你的计算机中正确地将标签居中吗?你是如何运行这个程序的?你在用跑步小家伙图标吗?这在我的机器上运行得很好。是的,我正在使用running guy图标。字体越大,越偏离中心:(这是一个屏幕截图,字体大小为400,使用您提供的链接中的eclipse。@user1296058-oops!我的错误-我输入了您的代码!检查更新的答案。这很奇怪。getAscent()似乎为我返回了一个正值。我想getAscent()可能返回了错误的值?在我的程序getHeight()中)返回492的值,因此我将字体大小设置为490 text.setFont(“Arial-490”),然后设置text.setLocation(0490)。这将使字体几乎与窗口一样大。但当我运行程序时,字体仍然只有屏幕高度的3/4。