2013-06-13 42 views
1

我正在做一個涉及處理和RCP的項目。到目前爲止,我已經完成了相當多的工作,並希望在調整RCP窗口大小(用鼠標拖動邊緣)時自動調整處理草圖的大小。如何在調整RCP窗口大小時自動讓草圖在處理中調整大小?

現在很多網站都說resize在處理過程中不被支持,有些則告訴我使用frame.setResizable(true);.當放置在我的public void setup(){}函數中時,會返回錯誤。

我的下一個選擇是向RCP窗口添加一個調整大小的偵聽器,但是如果我在main或createWindows函數內部實現下面的代碼,它只會返回錯誤。

有人可以幫我嗎?

final Composite b = new Composite(shell, SWT.NONE); 

b.addListener(SWT.MouseDown, new Listener() { 

     public void handleEvent(Event e) { 

     Tracker tracker = new Tracker(b.getParent(), SWT.RESIZE); 
     tracker.setStippled(true); 
     Rectangle rect = b.getBounds(); 
     tracker.setRectangles(new Rectangle[] { rect }); 
     if (tracker.open()) { 
      Rectangle after = tracker.getRectangles()[0]; 
      b.setBounds(after); 
     } 
     tracker.dispose(); 
     } 
    }); 

回答

2

這些網站是正確的:處理從字面上不支持調整。它不在API中,唯一的辦法就是使用而不是處理代碼轉義到下層子系統(如果Java編譯,java JFrame調整大小處理,如果JavaScript編譯,canvas/page調整大小處理)。當然,這樣做意味着代碼不再處理,並且不能在可以運行處理代碼的環境之間移植,同時保證代碼將運行(JS不知道Java是什麼,並且Java編譯將在JS語法上斷開) )。

處理size函數設置了所有類型的管理變量,如果不徹底破壞所有內容而不能再次設置,並且沒有單獨使用的resize函數。更有趣的是,即使有,3D模式也不會讓你這樣做,因爲openGL/webGL的大小調整是不可能的(所有的GL緩衝區都是固定的大小,調整大小將需要重建每個像素的寬度/高度變化)。

所以如果你想調整大小,可以做一些巧妙的事情,而你可以在這裏創建一個新的草圖,並使用舊草圖的狀態進行實例化,這樣你就可以繼續學習,新的草圖實例。

+0

雖然我的代碼如下,我相信你的解決方案應該會更好,無論如何,這個草圖實例的事情將如何完成? –

+0

如果你可以序列化你的狀態,你可以給你的草圖一個函數沿'void setFullState(...){...}'的行,並使用它來重建;開始一個新的草圖,告訴草圖1草圖2存在並讓它使用'void notifyOfNewSketch(PApplat newSketch){newSketch.setFullState(generateState())來傳達它的狀態; }'。這當然不是微不足道的,能夠序列化/反序列化你的狀態需要精確性。如果您專門針對Java和/或JS,則有更好的方法。 –

+0

感謝您的回答,我會研究它。 –

0

一旦我嘗試這個,它的接縫工作,與OpenGL雖然它有一些錯誤,但也有一些作品......看: 當然,你需要做相對於寬度/高度可調整大小的東西...

void setup() 
{ 
    size(200, 200); // always first line 
    frame.setResizable(true); 
    background(255); 
    smooth(); 
} 


void draw() 
{ 
    background(255); 
    ellipse(width/2, height/2, width/6, height/6); 
} 
相關問題