Advertisement
lewapkon

MouseTest

Mar 22nd, 2013
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.80 KB | None | 0 0
  1. import java.awt.Cursor;
  2. import java.awt.EventQueue;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.event.MouseAdapter;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseMotionListener;
  8. import java.awt.geom.Point2D;
  9. import java.awt.geom.Rectangle2D;
  10. import java.util.ArrayList;
  11.  
  12. import javax.swing.JComponent;
  13. import javax.swing.JFrame;
  14.  
  15. /**
  16.  * @version 1.0 2013-02-10
  17.  * @author Paweł Koniarski
  18.  */
  19. public class MouseTest
  20. {
  21.     public static void main(String[] args)
  22.     {
  23.         EventQueue.invokeLater(new Runnable()
  24.         {
  25.             public void run()
  26.             {
  27.                 MouseFrame frame = new MouseFrame();
  28.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29.                 frame.setVisible(true);
  30.             }
  31.         });
  32.     }
  33. }
  34. /**
  35.  * Ramka zawierająca panel testujący działania myszy.
  36.  */
  37. class MouseFrame extends JFrame
  38. {
  39.     public MouseFrame()
  40.     {
  41.         setTitle("MouseTest");
  42.         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  43.        
  44.         //Dodanie komponentu do ramki.
  45.        
  46.         MouseComponent component = new MouseComponent();
  47.         add(component);
  48.     }
  49.    
  50.     public static final int DEFAULT_WIDTH = 300;
  51.     public static final int DEFAULT_HEIGHT = 200;
  52. }
  53. /**
  54.  * Komponent z działaniami myszy, do którego można dodawać (lub z którego można usuwać) kwadraty
  55.  */
  56. class MouseComponent extends JComponent
  57. {
  58.     public MouseComponent()
  59.     {
  60.         squares = new ArrayList<Rectangle2D>();
  61.         current = null;
  62.         addMouseListener(new MouseHandler());
  63.         addMouseMotionListener(new MouseMotionHandler());
  64.     }
  65.    
  66.     public void paintComponent (Graphics g)
  67.     {
  68.         Graphics2D g2 = (Graphics2D) g;
  69.        
  70.         //Rysowanie wszystkich kwadratów.
  71.         for (Rectangle2D r : squares)
  72.             g2.draw(r);
  73.     }
  74.    
  75.     /**
  76.      * Znajduje pierwszy kwadrat zawierający punkt.
  77.      * @param p punkt
  78.      * @return pierwszy kwadrat zawierający punkt p
  79.      */
  80.     public Rectangle2D find(Point2D p)
  81.     {
  82.         for (Rectangle2D r : squares)
  83.         {
  84.             if (r.contains(p)) return r;
  85.         }
  86.         return null;
  87.     }
  88.    
  89.     /**
  90.      * Dodaje kwadrat do zbioru.
  91.      * @param p środek kwadratu
  92.      */
  93.     public void add(Point2D p)
  94.     {
  95.         double x = p.getX();
  96.         double y = p.getY();
  97.        
  98.         current = new Rectangle2D.Double(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH);
  99.         squares.add(current);
  100.         repaint();
  101.     }
  102.    
  103.     /**
  104.      * Usuwa kwadrat ze zbioru.
  105.      * @param s kwadrat, który ma być usunięty
  106.      */
  107.     public void remove(Rectangle2D s)
  108.     {
  109.         if (s == null) return;
  110.         if (s == current) current = null;
  111.         squares.remove(s);
  112.         repaint();
  113.     }
  114.    
  115.     private static final int SIDELENGTH = 10;
  116.     private ArrayList<Rectangle2D> squares;
  117.     private Rectangle2D current;
  118.    
  119.     //Kwadrat zawierający kursor myszy.
  120.    
  121.     private class MouseHandler extends MouseAdapter
  122.     {
  123.         public void mousePressed(MouseEvent event)
  124.         {
  125.             //Dodanie nowego kwadratu, jeśli nie jest wewnątrz innego kwadratu.
  126.             current = find(event.getPoint());
  127.             if (current == null) add(event.getPoint());
  128.         }
  129.        
  130.         public void mouseClicked(MouseEvent event)
  131.         {
  132.             //Usunięcie kwadratu w wyniku jego dwukrotnego kliknięcia.
  133.             current = find(event.getPoint());
  134.             if (current != null && event.getClickCount() >= 2) remove(current);
  135.         }
  136.     }
  137.    
  138.     private class MouseMotionHandler implements MouseMotionListener
  139.     {
  140.         public void mouseMoved(MouseEvent event)
  141.         {
  142.             //Ustawianie kursora na krzyżyk, jeśli znajduje się wewnątrz kwadratu.
  143.            
  144.             if (find(event.getPoint()) == null) setCursor(Cursor.getDefaultCursor());
  145.             else setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
  146.         }
  147.        
  148.         public void mouseDragged(MouseEvent event)
  149.         {
  150.             if (current != null)
  151.             {
  152.                 int x = event.getX();
  153.                 int y = event.getY();
  154.                
  155.                 //Przeciągnięcie aktualnego kwadratu w celu wycentrowania go w punkcie (x,y).
  156.                 current.setFrame(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH);
  157.                 repaint();
  158.             }
  159.         }
  160.     }
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement