我希望這個問題不會被視爲太籠統。我明白,要使用JPanel
來覆蓋paintComponent
方法,並將所有繪圖代碼放入該方法中。我的問題是爲什麼!爲什麼Java似乎不允許/提供使用諸如panel.drawLine(x1,y1,x2,y2)
或panel.drawText(text,x,y)
等方法的繪圖?在Delphi中這一切都變得容易多了。我必須有一個原因,我無法弄清楚。爲什麼需要使用paintComponent方法來繪製Java?
回答
這是因爲這是它的工作方式。它是這樣設計的。不過,我想你的問題是關於「爲什麼」
記住,鞦韆第一近15年前就出來了。其中一個批評是API太慢了(事實上,速度很慢,因爲人們沒有真正理解如何使用它,但這是另一回事),所以API必須在設計時考慮到性能。
有涉及到許多因素...
搖擺採用被動烤漆工藝,這意味着塗料請求進行處理油漆子系統和時間表(回到了EDT)製成。油漆子系統決定什麼時候以及應該塗多少油漆。這是在褻瀆塗料子系統的情況下完成的。
這意味着你永遠不會真正知道什麼時候可以被執行的油漆週期,所以我們需要一些方法,以便能夠響應這些請求。
多功能性是另一個因素。 API足夠抽象,以至於組件被繪製到的地方並不重要(很多)。也就是說,你可能被畫到屏幕,打印機甚至圖像上。這意味着您不必重複大量的代碼就可以在不同的設備上工作。
你也永遠不知道當一個分量將成顯示(即,當它成爲連接到本地同行)。這意味着圖形上下文可能是null
,所以擁有「幫助器」方法可能會導致更多問題。當調用paintComponent
時,(主要)保證有一個有效的圖形上下文進行繪製。
擴將是另一個因素。不僅如此,覆蓋paintComponent
以改變某些組件的繪製方式非常簡單,與當前情況一樣,繪製系統也可以提供擴展的Graphics上下文。當paintComponent
被調用時(至少被paint子系統調用),它保證Graphics
上下文將是Graphics2D
的一個實例,它是Graphics
的擴展,爲API提供了許多重要的增強。
這樣做完全不需要改變人們使用的基類,所以如果他們不想使用這些功能,他們仍然不受影響。
您可能需要採取通讀...
詳情
記住 「畫畫是有趣的」;)
更多的想法
需要考慮的其他因素之一是,API不僅僅是考慮用戶界面,而且還包括打印和圖像處理,因此API是繪畫的核心。 API與其目標分離,允許更大的靈活性,但也是通用性。
這意味着如果您需要打印到打印機或渲染圖像,您可以使用相同的API來繪製屏幕。
- 1. 爲什麼不調用paintComponent方法?在printComponent方法要打印
- 2. 爲什麼需要使用'addChildViewController:'方法
- 3. 爲什麼不調用paintComponent()方法?
- 4. 從paintComponent調用繪製方法
- 5. 爲什麼我需要繪製橢圓
- 6. 我需要使用什麼來繪製圖片形式?
- 7. Java爲什麼我的方法paintComponent()不起作用?
- 8. 用Pygame繪製正方形;繪製方法只需要整數?
- 9. Java - 重繪方法repaint()不調用paintComponent()方法
- 10. 如何在JPanel中繪製出來的paintComponent方法?
- 11. 爲什麼只需使用「=」(來自Hartl的教程)就需要賦值方法?
- 12. 爲什麼我們需要System類來調用out.println()方法?
- 13. Java - 調用paintComponent方法
- 14. 爲什麼Java-8 lambda需要invokeDynamic byteCode來調用接口方法
- 15. 在JFrame中創建JPanel並使用paintComponent()方法繪製面板
- 16. 爲什麼控制器需要實例變量來使用ajax
- 17. 爲什麼spinner listener需要onNothingSelected方法?
- 18. 爲什麼CustomFieldSerializer需要靜態方法?
- 19. 爲什麼我們需要addRequestHeader方法?
- 20. 爲什麼我們需要ContinueWith方法?
- 21. 爲什麼需要DataBind()方法?
- 22. 爲什麼我們需要Buffer.isBuffer方法?
- 23. 爲什麼申請方法需要parens?
- 24. 爲什麼Settings.System.put/get方法需要ContentResolver?
- 25. 爲什麼JSON不需要setXXX方法?
- 26. 爲什麼你需要重載方法?
- 27. 當我用空的paintComponent(g)方法覆蓋時爲什麼重繪組件?
- 28. 在Java中使用此方法需要什麼API?
- 29. Java URLConnection - 什麼時候需要使用connect()方法?
- 30. 在Java中使用「saveToFile」方法需要導入什麼類?
啊,我現在應該刪除我的答案。很好的回答+1。 –