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(); } }); } } |
Головна > Java Swing >