Графіка і кнопки Swing

import java.awt.Color;

import java.awt.BasicStroke;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Point;

import java.awt.RenderingHints;

import java.awt.event.ActionEvent;

import java.awt.event.MouseEvent;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import javax.swing.AbstractAction;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.KeyStroke;

public class Paint extends JPanel {

    private MouseHandler mouseHandler = new MouseHandler();

    private Point p1 = new Point(100, 200);

    private Point p2 = new Point(300, 200);

    private Point p3 = new Point(200, 100);

    private int mouse_point = -1;

    private boolean drawing;

    public Paint() {

        this.setPreferredSize(new Dimension(640, 480));

        this.addMouseListener(mouseHandler);

        this.addMouseMotionListener(mouseHandler);

    }

    protected void paintComponent(Graphics g) {

   

   

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;

        g2d.setColor(Color.red);

        g2d.setRenderingHint(

            RenderingHints.KEY_ANTIALIASING,

            RenderingHints.VALUE_ANTIALIAS_ON);

        g2d.setStroke(new BasicStroke(8,

            BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));

        

        

        g.drawLine(p1.x, p1.y, p2.x, p2.y);

        g.drawLine(p1.x, p1.y, p3.x, p3.y);

        g.drawLine(p2.x, p2.y, p3.x, p3.y);

        

        

        

    }

    private class MouseHandler extends MouseAdapter {

        public void mousePressed(MouseEvent e) {

            drawing = true;

            double near=1000;

            double mas[]=new double[3];

            mas[0] = Math.hypot(p1.x-e.getX(), p1.getY()-e.getY());

            mas[1] = Math.hypot(p2.x-e.getX(), p2.getY()-e.getY());

            mas[2] = Math.hypot(p3.x-e.getX(), p3.getY()-e.getY());

            

            System.out.println(mas[0]);

            System.out.println(mas[1]);

            System.out.println(mas[2]);

      

            for (int i = 0; i < mas.length; i++) {

if(mas[i]<near){near = mas[i]; mouse_point = i+1; }           

}

            System.out.println(mouse_point);

            System.out.println();

            

            if(mouse_point == 1){p1 = e.getPoint(); }

            if(mouse_point == 2){p2 = e.getPoint(); }

            if(mouse_point == 3){p3 = e.getPoint(); }        

            repaint();

        }

  

        public void mouseReleased(MouseEvent e) {

            drawing = false;           

            if(mouse_point == 1){p1 = e.getPoint(); }

            if(mouse_point == 2){p2 = e.getPoint(); }

            if(mouse_point == 3){p3 = e.getPoint(); }   

            repaint();

        }

        public void mouseDragged(MouseEvent e) {

            if (drawing) {               

                if(mouse_point == 1){p1 = e.getPoint(); }

                if(mouse_point == 2){p2 = e.getPoint(); }

                if(mouse_point == 3){p3 = e.getPoint(); }   

                repaint();

            }

        }

    }

    private class ControlPanel extends JPanel {

        private static final int DELTA = 10;

        public ControlPanel() {

            this.add(new MoveButton("\u2190", KeyEvent.VK_LEFT, -DELTA, 0));

            this.add(new MoveButton("\u2191", KeyEvent.VK_UP, 0, -DELTA));

            this.add(new MoveButton("\u2192", KeyEvent.VK_RIGHT, DELTA, 0));

            this.add(new MoveButton("\u2193", KeyEvent.VK_DOWN, 0, DELTA));

        }

        private class MoveButton extends JButton {

            KeyStroke k;

            int dx, dy;

            public MoveButton(String name, int code,

                    final int dx, final int dy) {

                super(name);

                this.k = KeyStroke.getKeyStroke(code, 0);

                this.dx = dx;

                this.dy = dy;

                this.setAction(new AbstractAction(this.getText()) {

                    @Override

                    public void actionPerformed(ActionEvent e) {

                   

                        Paint.this.p1.translate(dx, dy);

                        Paint.this.p2.translate(dx, dy);

                        Paint.this.p3.translate(dx, dy);

                        

                        Paint.this.repaint();

                    }

                });

                ControlPanel.this.getInputMap(WHEN_IN_FOCUSED_WINDOW)

                    .put(k, k.toString());

                ControlPanel.this.getActionMap()

                    .put(k.toString(), new AbstractAction() {

         

                    public void actionPerformed(ActionEvent e) {

                        MoveButton.this.doClick();

                    }

                });

            }

        }

    }

    private void display() {

        JFrame f = new JFrame("Trykutnik");

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.add(this);

        f.add(new ControlPanel(), BorderLayout.SOUTH);

        f.pack();

        f.setLocationRelativeTo(null);

        f.setVisible(true);

    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

      

            public void run() {

                new Paint().display();

            }

        });

    }

}