2012-03-31 25 views
2

我想用斯坦福大學的在線CS106A課程學習java。該課程採用ACM庫包從http://jtf.acm.org/爲什麼我的標籤不能沿y軸居中? (斯坦福大學SEE CS106A)

誰能告訴我爲什麼我的下面代碼不居中沿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); 
    } 
} 

當我運行這個程序,我得到這個:http://i.imgur.com/rriSX.jpg

編輯: 多數民衆贊成困擾我的另一件事是,在分配樣本來看似乎也有同樣的對齊問題。 (參見以下鏈接,實例3)

http://see.stanford.edu/materials/icspmcs106a/13-assignment-2-simple-java.pdf

如果在畫面仔細看,可以看到該類盒內側的標籤也沒有正確居中?

回答

1

您可以使用定位在您想要的標籤setBounds方法。它需要四個int參數。 e.g:

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

我覺得這裏的問題是,標籤確實得到定位,但它是在錯誤的loncation。 – templatetypedef 2012-03-31 18:19:47

+0

謝謝。我知道有解決這個問題的辦法。但我真的想知道我做錯了什麼。 – user1296058 2012-03-31 18:23:14

0

編輯:哦,親愛的,我刪除錯誤代碼時我在測試吧!我意外地減去了兩個值,不加它們。 getAscent()返回表示文本上升到基線以上有多少像素的負數,因此對於位置的正確公式是

double cy = (getHeight()/2) - (text.getAscent()/2); 

的邏輯是一樣的,但事實證明,getAscent()是,你必須翻轉消極手段標誌。對於那個很抱歉!


在CS106A,我們通常不作爲恰恰小程序,因爲默認的applet查看獲得窗口不正確的尺寸(即調用getWidth()getHeight()會產生不正確的結果)運行Java程序。如果您從CS106A網站下載Stanford Eclipse,你會得到可以運行你寫作爲獨立的應用程序的Java程序的Eclipse插件。發生這種情況時,窗口大小和形狀實際上是正確的,所以getWidth()getHeight()將報告正確的值。

另外,考慮添加以下代碼到你的程序:

public static void main(String[] args) { 
    new /* name of your class */.start(args); 
} 

然後,您可以直接運行該程序的Java應用程序,而不是一個小程序,而這個問題應該得到解決。

希望這會有所幫助!

+0

我已經在您提供的鏈接中下載了eclipse,並在原始帖子中運行了代碼。仍然是同樣的問題。我也嘗試了原版在線課程中的老版本的eclipse。這也產生了相同的結果。 您是否能夠在計算機中正確對準標籤? – user1296058 2012-03-31 19:09:50

+0

你如何運行程序?你在使用跑步小傢伙嗎?這在我的機器上工作得很好。 – templatetypedef 2012-03-31 19:13:00

+0

是的,我正在使用正在運行的傢伙圖標。字體越大,它越偏離中心。 :( 這是一個屏幕快照,字體大小爲400,在您提供的鏈接中使用eclipse。 http://i.imgur.com/z07RO.jpg – user1296058 2012-03-31 19:15:14

相關問題