Java by API/java.awt/EventQueue

Материал из Java эксперт
Перейти к: навигация, поиск

EventQueue: getNextEvent()

   <source lang="java">
 

import java.awt.AWTEvent; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Main extends JPanel implements ActionListener {

 Main() {
   JButton button = new JButton("Click to chooose the first point");
   add(button);
   button.addActionListener(this);
 }
 public void actionPerformed(ActionEvent evt) {
   Graphics g = getGraphics();
   Point p = getClick();
   g.drawOval(p.x - 2, p.y - 2, 4, 4);
   Point q = getClick();
   g.drawOval(q.x - 2, q.y - 2, 4, 4);
   g.drawLine(p.x, p.y, q.x, q.y);
   g.dispose();
 }
 public Point getClick() {
   EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
   while (true) {
     try {
       AWTEvent evt = eq.getNextEvent();
       if (evt.getID() == MouseEvent.MOUSE_PRESSED) {
         MouseEvent mevt = (MouseEvent) evt;
         Point p = mevt.getPoint();
         Point top = getRootPane().getLocation();
         p.x -= top.x;
         p.y -= top.y;
         return p;
       }
     } catch (InterruptedException e) {
     }
   }
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.setSize(300, 200);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.add(new Main());
   frame.setVisible(true);
 }

}


 </source>