Java 为什么我的标签不沿y轴居中?(见CS106A)
我正在尝试使用斯坦福大学的在线CS106A课程学习java。本课程使用来自的acm库软件包 有人能告诉我为什么我下面的代码没有使标签沿y轴居中吗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
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。