Головна‎ > ‎Java Swing‎ > ‎

Графіка і кнопки 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();
            }
        });
    }
}