2012-11-14 29 views
3

我想定義窗口的大小,但我沒有找到一個乾淨的方式來做到這一點。的setSize()給出了一個奇怪的結果:如何處理GraphicsProgram(ACM庫)的窗口大小?

public class Test extends GraphicsProgram { 

    public void run() { 

     setSize(400, 600); 
     add(new GLabel("Width: " + getWidth(), 30, 30)); 
     add(new GLabel("Height: " + getHeight(), 30, 50)); 
    } 

} 

結果是384 X 542的差距始終是相同的(-16 X -58),所以很容易圍繞構建工作。有沒有辦法直接定義有用像素的大小?

+0

我肯定會對設置畫布尺寸的方式感興趣,因爲今晚我有這個相同的問題,有解決方法,但他們是應該不必要的startercode笨重的修改。 – Lorek

+0

畫布大小是菜單窗口高度/寬度的應用程序大小+ px。它看起來像它的(x,y)(18px,70px)菜單和欄的修改。使用setSize(x + mod,y + mod),您可以修正您的座標系。 – Lorek

+0

同意我寧願能夠將畫布大小直接設置爲可用大小。應該有一些很好的理由讓它像這樣,例如集成到網頁中。 –

回答

1

我在研究斯坦福大學課程項目(突破)的代碼時發現了一個解決方案。 GraphicsProgram不會根據其字段WIDTH,HEIGHT,EAST,CENTER等自動構建。因此,我們需要一個resize()來設置acm.program.GraphicsProgramjava.applet.Applet繼承的窗口大小。 只需添加一個resize()pause()即可完成工作。

public class Test extends GraphicsProgram { 
    private static final int WIDTH = 400; 
    private static final int HEIGHT = 600; 
    private static final int PAUSE = 10; // or whatever interval you like 

    public void run() { 
     this.resize(WIDTH,HEIGHT); 
     pause(PAUSE); 
     // game logic here 
     ... 
    } 

} 

pause()是必要的,因爲調整大小需要時間。如果您在調整大小後立即添加組件,它將避免組件的錯位。

0
public void init() { 

    setSize(400, 600); 


} 

而不是在run方法中設置大小在init!上執行它!