2015-11-19 58 views
0

我正在創建具有可變大小的自定義Codenameone組件。該組件顯示固定數量的文本,跨越多行。因此寬度和高度是相關的。如果寬度較小,則文本適合一行,並且需要更多行。我已設法設置首選寬度和首選高度。麻煩的是,當實際的繪畫發生時,寬度顯然是由圖形對象graphics.getClipWidth()給出的,並且不符合我的首選寬度。因此,我的首選高度(在繪畫時看起來等於graphics.getClipHeight())不正確,因爲剪輯寬度不等於我的首選寬度,該寬度用於計算首選高度。我怎樣才能得到graphics.getClipHeight()有正確的身高?換句話說,是否可以使用組件在渲染時實際具有的寬度來指定組件的高度?根據實際的Codenameone的組件寬度計算首選高度

祝 馬克ķ

回答

0

這是我們必須與TextArea確切的問題,恐怕沒有簡單的答案。例如。如果組件提供了X的首選大小,佈局管理器可能會決定分配不同大小,因此需要不同的佈局。

這是我們在構建Codename One時做出的有意識的設計選擇,爲了實現這一目標,您需要有效遞歸重排,重新計算大小/維度,直到您獲得最佳結果。這些算法在定義上很慢並且難以進行基準測試(因爲很難預測迴流在具有不同字體,填充等的設備上的表現如何)。

TextArea我們有一個「窮人迴流」,如果寬度看起來不正確,會觸發重新驗證。這已成爲TextArea中許多問題的來源。

您可以在TextArea source中看到此內容,請搜索setShouldCalcPreferredSize調用。

+0

感謝您的快速回復。根據getWidth()是否被設置(即返回一個不等於0的值),getPreferredH()會返回不同的值嗎?它似乎在BoxLayout-Y中工作。另一種方法是使用屏幕寬度來估計高度 - 聽起來很脆弱。 –

+0

這不是正確的工作方式。你通常應該重載calcPreferredSize(),在這種情況下,它應該返回不同的值。 –

+0

好吧,我會嘗試一下。 –

相關問題