java 板


LINE

※ 引述《olys (查無暱稱)》之銘言: : ※ 引述《olys (查無暱稱)》之銘言: : : 一直找不到一個完整的教學 =_=........ : : 現在好像只有看到 : : 1.要創一個新的class是繼承JPanel, 裡面到底要加什麼不知道, : : 然後宣告Panel時要用那個Class : : 2.要加一行 Graphics g = gPanel.getGraphics(); , 要放在哪裡不知道 : : 然後以上備齊似乎就可以g.drawline等等亂畫了 : : 可是完整的過程是怎麼樣啊 orz : 我想我直接說我要作的功能好了,有可能是因為這樣所以不能用方法2 : 我現在宣告了一個JPanel,叫作gPanel : 然後我宣告了一個滑鼠監聽器,現在已確定可以抓到滑鼠游標&點擊會紀錄座標 : 現在我想在mouseClicked裡新增一個功能,除了會紀錄點擊座標外, : 還會在gPanel上畫上一個* : 我試著將gPanel在宣告設成Visible, : 也將Graphics g = gPanel.getGraphics(); 放在Class中當全堿變數, : 但是我在mouseClicked裡加上一句g.drawString("*",e.getX(), e.getY()); : 再按下eclipse的run就會跑出錯誤 orz, 但是eclipse並抓不到這句有什麼問題 : 我試過把Graphics g = gPanel.getGraphics();放在MouseListener下,也會有同樣問題 : 我試過很多關鍵字,真的找不到完整的教學ˊˋ : 如果有版友知道還請提供 import java.awt.Dimension; import java.awt.Graphics; import javax.swing.*; public class DrawingPanel extends JPanel { public static void main(String[] args) { JFrame frame = new JFrame("test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new DrawingPanel()); frame.pack(); frame.setVisible(true); } @Override public Dimension getPreferredSize() { return new Dimension(400, 300); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // 把所有想畫的東西利用這個Graphics物件g畫出來!!! } } 這個可以應付大部份簡單的工作 如果需要滑鼠或是鍵盤,可以直接實作相對應的Listener import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import javax.swing.*; public class DrawingPanel extends JPanel implements MouseListener{ public DrawingPanel() { addMouseListener(this); } ArrayList<Point> list = new ArrayList<Point>(); @Override public Dimension getPreferredSize() { return new Dimension(400, 300); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); for(Point pt : list){ g.drawRect(pt.x,pt.y,5,5); } } @Override public void mouseClicked(MouseEvent e) { list.add(new Point(e.getX(),e.getY())); repaint(); } @Override public void mousePressed(MouseEvent e) {} @Override public void mouseReleased(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} public static void main(String[] args) { JFrame frame = new JFrame("test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new DrawingPanel()); frame.pack(); frame.setVisible(true); } } 由於Swing已經內含了Double Buffering所以不需要自己處理 只要overwrite paintComponent方法即可 要注意的是是沒有s的paintComponent而不是paintComponents 上下兩段程式碼只有差別在增加了MouseListener 並且新增了資料結構來儲存滑鼠按下了的位置 並且要注意當更新了資料(mouseClicked)之後,需要利用repaint來重新繪圖 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.250.25.222
1F:推 olys:paintComponent這樣宣告的話,在其他地方繪圖就不用再宣告 11/18 16:36
2F:→ olys:一次Graphic g了?另外repaint是等於刷新畫面的意思吧? 11/18 16:37
3F:→ progden:swing已經把流程都包好了,最好是在paintComponent裡面 11/20 23:39
4F:→ progden:繪圖就好了。 11/20 23:40







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP