作者fenir (severus)
看板java
標題繪圖的兩個問題
時間Wed Jun 20 00:48:05 2012
有兩個和paint()有關的小問題
1 沒有用物件存畫面上的圖形的話,要如何從最小化視窗還原後還留有之前的畫面?
每一次paint()能保留之前畫的東西,但是縮小再還原後整個畫面會清空
我是用override update()的方式讓每次畫畫時都不會清空畫布,只有加新的圖畫
public void update(Graphics g) {
paint(g);
}
執行順序是repaint() > update() > paint() > 畫出東西
目前問題是還原視窗後,程式會自動call paint()而不是update() ,所以畫布被清空
2.
http://imgur.com/Jsjkx
我是用fillOval當作畫筆的功能,抓取滑鼠的位置
問題是只要畫太快就會有間隙,請問有什麼辦法可以解決?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.48.111
1F:→ s3748679:1. Paint事件發生時再畫一次。 06/20 01:14
2F:→ s3748679:糟糕.. 這裡是Java板..... 請無視我的話吧 06/20 01:16
3F:→ fenir:不好意思我不太懂你的意思。我目前做法是override update() 06/20 01:20
4F:→ fenir:嗯@@ 06/20 01:21
5F:→ s3748679:抱歉~ 我以為這是在其他語言版問題.. 所以我真的不清楚~ 06/20 01:25
6F:推 lvlightvivi:1 repaint() 2 用直線連起來 06/20 06:34
我發現視窗最小化再還原後,程式會自動call paint()一次
所以有沒有repaint()其實沒有影響
我的"畫筆"功能是直接抓取滑鼠位置然後用fillOval畫出,沒有用物件的型式將
"畫"給存起來,所以程式自動call paint()時就無法畫出原圖了
另外就是我希望能調整畫筆的粗細,所以用drawLine無法調整粗細,還是您指的
「用直線連起來」是指另一種方法? 謝謝
※ 編輯: fenir 來自: 220.134.48.111 (06/20 11:33)
7F:→ bitlife:程式架構要修正,所有狀態應該要能在paint繪出 06/20 11:43
8F:→ sbrhsieh:可以透過調整 Graphics2D 的 stroke 屬性來調整粗細 06/20 12:02