Discussion:
[問題] 用JPanel做小畫家
(时间太久无法回复)
ppp
2006-10-26 19:46:40 UTC
Permalink
因為 Jpanel 在畫圖上怪怪的

每次新畫都會把板面清空

如果不用super.paintComponent(g) 雖然不會清空 但其他gui元件又會顯示的怪怪的

如果 當畫一個新的圖案上去 就把所有的圖全部從畫一次

在使用mouse 的dragged 拖拉圖案的時後 畫面reflesh的很嚴重 很難看

沒有辨法 2全其美嗎 ><


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.42.141
愚者
2006-10-26 19:50:46 UTC
Permalink
※ 引述《selection (ppp)》之銘言:
: 因為 Jpanel 在畫圖上怪怪的
: 每次新畫都會把板面清空
: 如果不用super.paintComponent(g) 雖然不會清空 但其他gui元件又會顯示的怪怪的
: 如果 當畫一個新的圖案上去 就把所有的圖全部從畫一次
: 在使用mouse 的dragged 拖拉圖案的時後 畫面reflesh的很嚴重 很難看
: 沒有辨法 2全其美嗎 ><

http://java.sun.com/docs/books/tutorial/2d/images/doublebuffering.html

畫在BufferedImage上,
有拖拉才做更新。 :D

--
這種不是直接畫在螢目上的方法
稱為off-screen,如果覺得能找到其他更有用的資料可以用這keyword去試看看:)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.213
小安
2006-10-26 19:50:48 UTC
Permalink
※ 引述《selection (ppp)》之銘言:
: 因為 Jpanel 在畫圖上怪怪的
: 每次新畫都會把板面清空
: 如果不用super.paintComponent(g) 雖然不會清空 但其他gui元件又會顯示的怪怪的
: 如果 當畫一個新的圖案上去 就把所有的圖全部從畫一次
: 在使用mouse 的dragged 拖拉圖案的時後 畫面reflesh的很嚴重 很難看
: 沒有辨法 2全其美嗎 ><

運用簡單的 double buffering 技術

要新增圖案時把新的圖繪在某個 image 上
paint 裡則只 draw 剛剛的 image

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.173.31
ppp
2006-10-27 00:58:50 UTC
Permalink
※ 引述《qrtt1 (愚者)》之銘言:
: ※ 引述《selection (ppp)》之銘言:
: : 因為 Jpanel 在畫圖上怪怪的
: : 每次新畫都會把板面清空
: : 如果不用super.paintComponent(g) 雖然不會清空 但其他gui元件又會顯示的怪怪的
: : 如果 當畫一個新的圖案上去 就把所有的圖全部從畫一次
: : 在使用mouse 的dragged 拖拉圖案的時後 畫面reflesh的很嚴重 很難看
: : 沒有辨法 2全其美嗎 ><
: http://java.sun.com/docs/books/tutorial/2d/images/doublebuffering.html
: 畫在BufferedImage上,
: 有拖拉才做更新。 :D


老實說到底要怎麼用BufferedImage,查了google和sun看了半天還是用不出來(唉,我太弱)
其實我真正的目的是在要JFrame上放個JPanel在上面可以畫曲線,然後在mousedragged時
讀進每個座標並畫點
如果在mousedragged時就將座標存進陣列,然後用迴圈再將每個座標畫點,可是這樣的話會
出現一種狀況,所畫出的曲線沒有辦法馬上看到,要先將執行視窗縮到最小在放大才看的到
,為何勒?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.42.141
TonyGoGo
2006-10-27 03:22:21 UTC
Permalink
※ 引述《selection (ppp)》之銘言:
: 因為 Jpanel 在畫圖上怪怪的
: 每次新畫都會把板面清空
: 如果不用super.paintComponent(g) 雖然不會清空 但其他gui元件又會顯示的怪怪的
: 如果 當畫一個新的圖案上去 就把所有的圖全部從畫一次
: 在使用mouse 的dragged 拖拉圖案的時後 畫面reflesh的很嚴重 很難看
: 沒有辨法 2全其美嗎 ><

也有簡單的方法

因為JPanel是繼承自Component Component裡面有一個update方法

update方法會在你每次repaint時執行並將Panel的圖像清空

所以只要覆寫update方法就行了

public void update (Graphics g) {paint(g);}

這樣你之前畫的東西就不會不見了

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.107.208

继续阅读narkive:
Loading...