    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import javax.swing.*;
    public class Paint extends JFrame {
    private static PCanvas canvas = new PCanvas();
    public Paint() {
    // Create a panel to group three buttons
    JPanel p1 = new JPanel(new GridLayout (1, 3));
    JButton jbtClear = new JButton("Clear");
    JButton jbtFG = new JButton("FG");
    JButton jbtBG = new JButton("BG");
    jbtClear.setToolTipText("Clears Canvas");
    jbtFG.setToolTipText("This changes Foreground Color");
    jbtBG.setToolTipText("This changes Background Color");
    p1.add(jbtClear);
    p1.add(jbtFG);
    p1.add(jbtBG);
    // Create a panel to group two labels
    JPanel p2 = new JPanel(new GridLayout (1, 4));
    JButton jbtLine = new JButton("Line");
    JButton jbtPolyLine = new JButton("PolyLine");
    JButton jbtOval = new JButton("Oval");
    JButton jbtFilledOval = new JButton("FilledOval");
    jbtLine.setToolTipText("Creates a line");
    jbtPolyLine.setToolTipText("Creates a Poly Line");
    jbtOval.setToolTipText("Creates an oval");
    jbtFilledOval.setToolTipText("Creates a filled oval");
    p2.add(jbtLine);
    jbtLine.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    canvas.line();
    }
    });
    p2.add(jbtPolyLine);
    p2.add(jbtOval);
    p2.add(jbtFilledOval);
    // Create a panel to group two labels
    JPanel p3 = new JPanel(new GridLayout (1, 4));
    JButton jbtRectangle = new JButton("Rectangle");
    JButton jbtFilledRectangle = new JButton("FilledRectangle");
    JButton jbtRoundRectangle = new JButton("RoundRectangle");
    JButton jbtFilledRoundRectangle = new JButton("FilledRoundRectangle");
    jbtRectangle.setToolTipText("Creates a Rectangle");
    jbtFilledRectangle.setToolTipText("Creates a Filled Rectangle");
    jbtRoundRectangle.setToolTipText("Creates a round rectangle");
    jbtFilledRoundRectangle.setToolTipText("Creates a filled round rectangle");
    p3.add(jbtRectangle);
    p3.add(jbtFilledRectangle);
    p3.add(jbtRoundRectangle);
    p3.add(jbtFilledRoundRectangle);
    // Add two panels to the frame
    setLayout(new GridLayout(4, 1, 1, 1));
    add(canvas, BorderLayout.NORTH);
    add(p1);
    add(p2);
    add(p3);
    }
    public static void main(String[] args) {
    // Create a frame and set its properties
    JFrame frame = new Paint();
    frame.setTitle("TestSwingCommonFeatures");
    frame.setSize(700, 700);
    frame.setLocationRelativeTo(null); // Center the frame
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    public static class PCanvas extends JPanel {
    private int x = 0;
    private int y = 0;
    public void line(){
    addMouseMotionListener(new MouseMotionAdapter(){
    public void mouseDragged(MouseEvent e){
    x = e.getX();
    y = e.getY();
    System.out.println(x + y);
    repaint();
    }
    });
    }
    /** Repaint the line */
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    }
    }
    }

