close

參考答案

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
 
class JDD01
{   
    public static void main(String[] args)
    {
        new MyFrame();
    }
}

class MyFrame extends JFrame
{
    Color curColor;
    
    MyFrame() 
    {   
        //視窗大小、標題、位置與關閉事件設定
        setSize(640,480);
        setTitle("畫筆功能");
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        //加入自訂容器至中央區塊
        setLayout(new BorderLayout()); 
        add(new MyPanel(this), BorderLayout.CENTER); 
        setVisible(true);
        } 
}

class MyPanel extends Panel 
{   
    MyFrame parent;
    int curX,curY,lastX=-1,lastY=-1;
    
    
    public MyPanel(MyFrame p) 
    {   
        parent = p;
        setSize(600,480);
        setBackground(Color.WHITE);
        
        //當滑鼠按下時
        this.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                lastX=e.getX();
                lastY=e.getY();//紀錄目前座標
            }
        });
        
        //當滑鼠拖曳時
        this.addMouseMotionListener(new MouseAdapter(){
            public void mouseDragged(MouseEvent e){
                Graphics g = MyPanel.this.getGraphics();
                g.setColor(parent.curColor);
                curX=e.getX();
                curY=e.getY();
                //從最後紀錄的座標畫至目前座標
                g.drawLine(lastX, lastY, curX, curY);
                //繪製完畢後,目前的座標成為下次繪製的起始座標
                lastX=curX;
                lastY=curY;
            }
        });
    }
}

 

 

執行結果

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Dino 的頭像
    Dino

    Dino`s Note

    Dino 發表在 痞客邦 留言(0) 人氣()