11.3 鼠标事件
来源:互联网 发布:15年网络流行关键词 编辑:程序博客网 时间:2024/06/05 19:06
import java.awt.*;import javax.swing.*;/** * @version 1.34 2015-06-12 * @author Cay Horstmann */public class MouseTest{ public static void main(String[] args) { EventQueue.invokeLater(() -> { JFrame frame = new MouseFrame(); frame.setTitle("MouseTest"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); }}
import javax.swing.*;/** * A frame containing a panel for testing mouse operations */public class MouseFrame extends JFrame{ public MouseFrame() { add(new MouseComponent()); pack(); }}
import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.util.*;import javax.swing.*;/** * A component with mouse operations for adding and removing squares. */public class MouseComponent extends JComponent{ private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; private static final int SIDELENGTH = 10; private ArrayList<Rectangle2D> squares; private Rectangle2D current; // the square containing the mouse cursor public MouseComponent() { squares = new ArrayList<>(); current = null; addMouseListener(new MouseHandler()); addMouseMotionListener(new MouseMotionHandler()); } public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // draw all squares for (Rectangle2D r : squares) g2.draw(r); } /** * Finds the first square containing a point. * @param p a point * @return the first square that contains p */ public Rectangle2D find(Point2D p) { for (Rectangle2D r : squares) { if (r.contains(p)) return r; } return null; } /** * Adds a square to the collection. * @param p the center of the square */ public void add(Point2D p) { double x = p.getX(); double y = p.getY(); current = new Rectangle2D.Double(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH); squares.add(current); repaint(); } /** * Removes a square from the collection. * @param s the square to remove */ public void remove(Rectangle2D s) { if (s == null) return; if (s == current) current = null; squares.remove(s); repaint(); } private class MouseHandler extends MouseAdapter { public void mousePressed(MouseEvent event) { // add a new square if the cursor isn't inside a square current = find(event.getPoint()); if (current == null) add(event.getPoint()); } public void mouseClicked(MouseEvent event) { // remove the current square if double clicked current = find(event.getPoint()); if (current != null && event.getClickCount() >= 2) remove(current); } } private class MouseMotionHandler implements MouseMotionListener { public void mouseMoved(MouseEvent event) { // set the mouse cursor to cross hairs if it is inside // a rectangle if (find(event.getPoint()) == null) setCursor(Cursor.getDefaultCursor()); else setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); } public void mouseDragged(MouseEvent event) { if (current != null) { int x = event.getX(); int y = event.getY(); // drag the current rectangle to center it at (x, y) current.setFrame(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH); repaint(); } } } }
0 0
- 11.3 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件
- 鼠标事件!
- MapReduce--Shuffle过程
- 11.2 动作
- Beego初探
- 第14周实践 成绩处理函数版
- 深度优先,广度优先的学习(待续)
- 11.3 鼠标事件
- [ JoyfulPuTTY ] PuTTY开源代码分析.1 --- 全局配置
- 12062
- 11.4 AWT事件层次
- linux下shell编程小结
- Android Studio如何取消与SVN的关联
- SQLite数据库基本操作
- JSON
- Java的运行平台以及核心机制 JRE JVM JDK之间的联系