2012-12-02 45 views
0

我的導師爲圖形定義了this API。如何使用此Java GUI API繪製東西?

這很簡單,但我花了一兩個小時,試圖弄清楚如何使簡單的圖形操作顯示出來。

所以我有一個延伸TopLevel的類T,它是我的主框架。我也有延伸墊,在這裏一個襯墊P是它的paintComponent方法的主體:

@Override 
protected void paintComponent(Graphics2D g) { 
    super.paintComponent(g); 
    g.drawString("Hello", 0, 0); 
    g.fill(new Rectangle(5, 5)); 
    repaint(); //(Probably don't need) 
} 

我再打電話T.add(P),(我也做T.addButton(..)T.display(true)當我運行的應用程序,我看到了一個空白的畫布。按鈕我創建。

任何幫助表示讚賞。

+1

你如何在頂部框架中指定墊的佈局? –

+0

我試過用空params和這個:'new LayoutSpec(「width」,20,「height」,20);' – jaynp

+0

1)*「.. T擴展TopFrame」*什麼是TopFrame?我只看到['TopLevel'](http://www-inst.eecs.berkeley.edu/~cs61b/fa08/docs/ucb-docs/ucb/gui/TopLevel.html)2)4個類中沒有一個擴展任何AWT或Swing組件。 –

回答

2

繪製文本不是那麼簡單,你的想法。

的y位置表示字體的基線(點大多數TEX t坐。還有一條體面的線條,其中坐在基線下方的字符將延伸到(像'g'和'p'這樣的字符)。

字體也有上升。這是從Measuring Text

一個典型的字符基線(不包括明顯,下降)

enter image description here

上圖中的「高度」爲了正確繪製文本,你必須總是上升添加到y位置...

FontMetrics fm = g.getFontMetrics(); 
g.drawString("Hello", 0, fm.getAscent()); 

您也可以失去repaint調用,這將導致重繪管理器(EV真心實意地)請撥打paint方法您的組件,一遍又一遍......再次...

在Swing中,Graphics通常設置爲使顏色爲組件的前景色。你可能想嘗試改變顏色來確保。

在嘗試繪畫任何東西之前,嘗試使用類似g.setColor(Color.RED);的東西。

+0

感謝關於文本MadProgrammer的提示;我一定會記得的。但在這一點上,這是關於繪畫的任何事情。 我也對我的東西有着與背景顏色相同的預感,所以我看不到它們,但改變顏色並沒有改變任何東西。 – jaynp

+0

愚蠢的想法,但是,添加一個'System.out。println(「繪畫」);調用'paintComponent'方法,確保它開始調用 – MadProgrammer

0

T.setVisible(true); //施工後

+0

你在哪裏看到這個方法?我認爲'T.display(true).'正在做的是,但我沒有看到'setVisible'。 – jaynp

相關問題