如何在JPanel中繪製一些不會被重新繪製的東西,我正在做一個交通模擬程序,我希望繪製一次道路,因爲它不會改變。 謝謝如何在jPanel上繪製一些不會重新繪製的東西?
1
A
回答
3
我不確定你是否真的想讓你的道路永遠不會被重新粉刷 - 例如,當你的窗口被調整大小時,或者在另一個窗口阻擋它時,它會變得可見,重新繪製事件。如果你的面板從不重繪,那麼它看起來很奇特。
至於我記得,鞦韆纔會觸發適當的繪畫事件這樣的情況下,所以你應該以下子類JPanel的用合適的替代通常的方法是確定:
public class RoadPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// your drawing code here
}
}
如果緩存的路轉換爲圖像或其他圖形格式(以節省多次計算顯示數據),一次繪製後,這可能會爲您節省下一段時間的繪製時間。
3
據我所知,沒有,除非有一個透明的覆蓋技巧。
我看到(並且確實)的大多數圖形應用程序只是在每次重繪時重新繪製整個面板。現在,您可以在圖形緩衝區中執行一次,然後通過將圖形緩衝區複製到JPanel來快速繪製整個背景。它應該比調用所有圖形基元來繪製道路更快。或者,某些2D遊戲的做法,可能只畫一次,然後更新移動的部分,如精靈:它需要擦除精靈使用的舊地點(在那裏恢復背景)並重新繪製精靈新的地方。因此,您仍然擁有圖形緩衝區中的道路副本,但不是每次重新繪製整個道路,只更新一些小部分。可以稍快一點。
1
我所做的是設置一個布爾值,以確定某個部分是否需要重繪。然後,在paintComponent()
方法中,我可以檢查值並重繪某些東西,或不。
protected void paintComponent(Graphics g){
super.paintComponent(g);
if (drawRoad) {
drawRoadMethod(g);
}
drawTheRest(g);
}
有點像那樣。
3
每次面板被遮擋時(例如,框架最小化/另一個窗口放在頂部),組件需要重新繪製。因此只繪製一次東西不會像你想要的那樣工作。爲了使不改變的部分得到更有效的繪製,您可以將它們繪製成一個「緩衝」圖像,然後每次需要重繪面板或組件時繪製該緩衝區。
// Field that stores the image so it is always accessible
private Image roadImage = null;
// ...
// ...
// Override paintComponent Method
public void paintComponent(Graphics g){
if (roadImage == null) {
// Create the road image if it doesn't exist
roadImage = createImage(width, height);
// draw the roads to the image
Graphics roadG = roadImage.getGraphics();
// Use roadG like you would any other graphics
// object to draw the roads to an image
} else {
// If the buffer image exists, you just need to draw it.
// Draw the road buffer image
g.drawImage(roadImage, 0, 0, null);
}
// Draw everything else ...
// g.draw...
}
相關問題
- 1. 如何在Cocoa的AVPlayer視頻上繪製一些東西?
- 2. FillRect不會繪製任何東西
- 3. glDrawArrays不會繪製任何東西?
- 4. Libgdx Sprite.draw()不會繪製任何東西
- 5. glDrawElements不會繪製任何東西
- 6. 如何繼續在沒有重繪的情況下單擊按鈕後在JPanel上繪製某些東西?
- 7. iOS:如何讓繪圖板像繪製一些東西?
- 8. 如何重新繪製BorderLayout中的JPanel
- 9. 如何在前端的bing地圖繪製一些東西?
- 10. Canvas.drawVertices(...)繪製任何東西
- 11. ImageIcon.paintIcon不會在JPanel上繪製圖像
- 12. 如何在Gtk#窗口上繪製某些東西(線,圓等)?
- 13. JPanel不在JFrame上繪製
- 14. 在JButton的右上角繪製一些東西
- 15. 在我的LinearLayout上繪製一些東西?
- 16. tslib工具不會在屏幕上繪製任何東西
- 17. DirectX Demo不會在屏幕上繪製任何東西
- 18. paintGL不會在屏幕上繪製任何東西
- 19. Canvas.DrawBitmap()不會在android上繪製任何東西! (
- 20. 如何取消重新繪製JPanel?
- 21. JPanel不會正確繪製
- 22. 試圖重新繪製一個jpanel
- 23. 如何在JPanel上的JLabel上「繪製」?
- 24. 繪製方法不繪製任何東西
- 25. 如何繪製可滾動的東西?
- 26. 如何在默認的繪製結果頂部的子類控件繪製方法中繪製某些東西?
- 27. 堆疊JPanel重新繪製不正確
- 28. JPanel在分配新子類時不會重新繪製
- 29. matplotlib繪製不顯示任何東西
- 30. drawRect不想繪製任何東西