我想訪問Graphics類來繪製一個矩形,但是想要這樣做,而不必調用paintComponent方法。可能嗎?用沒有paintComponent的Graphics可以繪製Java嗎?
-2
A
回答
3
繪畫應始終以繪畫方式完成。
最常見的方法是在組件的paintComponent(...)
方法中執行自定義繪畫。
另一種方法是使用JLayer
類「裝飾」組件,並在JLayer的paint(...)
方法中實施繪畫。請閱讀Decorating Components Using the JLayer Class上的Swing教程部分以獲取更多信息和示例。
3
是的,可以用相同的方式繪製BufferedImage
(通過調用getGraphics()
方法直接使用Graphics
對象)。
但是,與BufferedImage
的情況不同,對於組件這樣做可能會造成混亂。原因是底層AWT/Swing代碼期望組件自己繪製(參見Component.paint
或JComponent.paintComponent
),而當此渲染需要發生時,它(底層的AWT/Swing代碼)將會處理大約(例如滾動,調整大小等)。因此,如果你從組件的外部繪畫,AWT/Swing在任何時候都決定「好吧,有一些新的繪畫/重繪要完成」,它會調用「標準方法」,期望你繪圖代碼在那裏。
當你在外部畫畫時,如果你沒有特別的安排來通知「需要重新繪畫」的情況,部分或整個「從外部畫」將被塗上或不塗上所有或全部有種不同的凌亂情況。
換句話說,如果你畫外之外,你需要編寫不僅不畫中的代碼,也:
- 的代碼重新實現堆已被執行AWT/Swing,它處理組件需要(重新)繪製的情況。
- 以某種方式禁用AWT/Swing「原生」處理繪畫。
請放心,你不想那(即使你認爲你這樣做)。
PS。如果你更好地描述爲什麼你需要這樣做,你可能會得到更多有用的建議,以便如何正確地做到這一點。
相關問題
- 1. 圖形沒有繪製在paintComponent(Graphics)中?
- 2. 您可以使用Core Graphics繪製文字陰影/輪廓嗎?
- 3. protected void paintComponent(Graphics g)
- 4. repaint()的繪製速度比paintComponent()慢嗎?
- 5. Java重繪()不調用paintComponent
- 6. 用Core Graphics繪製UIImage?
- 7. public void paintComponent(Graphics g)not working
- 8. Java重繪()不調用paintComponent()繪製圖像
- 9. paintComponent()將不會繪製
- 10. 如何在paintComponent外繪製?
- 11. paintComponent()繪製jMenu和JToolBar
- 12. Java的:沒有的paintComponent被稱爲
- 13. GL_BLEND沒有繪製JAVA
- 14. 用Core Graphics繪製圓弧時繪製的額外線條
- 15. paintComponent之後的Java Swing繪製圖像調用
- 16. paintComponent不可見java
- 17. 使用PaintComponent重繪()
- 18. 使用Core Graphics繪製「轉輪」?
- 19. 使用Core Graphics進行霧繪製
- 20. 使用Core Graphics繪製UIPageControl指標?
- 21. 將抽象Graphics對象傳遞給paintComponent()
- 22. 從paintComponent調用繪製方法
- 23. PaintComponent不適用於繪製形狀
- 24. 用paintComponent()和繼承繪製「圖層」
- 25. 使用paintComponent()繪製多個圖像
- 26. 使用PaintComponent在面板外繪製
- 27. 爲什麼需要使用paintComponent方法來繪製Java?
- 28. 重繪不調用的paintComponent
- 29. 有沒有可以幫助繪製元胞自動機圖形的Java庫?
- 30. 我們可以使用google api繪製路線(沒有折線)嗎?
您的問題實際上可能是一個[XY問題](http://mywiki.wooledge.org/XyProblem),當您最好的解決方案是完全使用不同的方法時,您會問「如何解決此代碼問題」 。考慮告訴我們你想要解決的總體問題,而不是你目前如何解決問題。例如,*爲什麼*你想避免使用paintComponent?你有什麼嘗試?什麼不工作? –
例如,是的,可以通過調用getGraphics()來繪製一個組件的Graphics上下文對象,然後使用該對象進行繪製,但這樣做可能會產生不穩定的圖像並拋出NullPointerExceptions,因爲以這種方式獲取的Graphics對象不是耐用。 –
此外,一個不調用paintComponent()方法,對吧? –