Swing拖动矩形,swing拖动,package cn.o
分享于 点击 23747 次 点评:162
Swing拖动矩形,swing拖动,package cn.o
package cn.outofmemory.snippets.desktop;import java.awt.Container;import java.awt.Cursor;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import java.awt.Rectangle;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JFrame;import javax.swing.JPanel;public class DrawSketch extends JPanel implements MouseMotionListener { private static final int recW = 14; private static final int MAX = 100; private Rectangle[] rect = new Rectangle[MAX]; private int numOfRecs = 0; private int currentSquareIndex = -1; public DrawSketch() { addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); currentSquareIndex = getRec(x, y); if (currentSquareIndex < 0) // not inside a square { add(x, y); } } @Override public void mouseClicked(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); if (evt.getClickCount() >= 2) { remove(currentSquareIndex); } } }); addMouseMotionListener(this); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < numOfRecs; i++) { ((Graphics2D) g).draw(rect[i]); } } public int getRec(int x, int y) { for (int i = 0; i < numOfRecs; i++) { if (rect[i].contains(x, y)) { return i; } } return -1; } public void add(int x, int y) { if (numOfRecs < MAX) { rect[numOfRecs] = new Rectangle(x, y, recW, recW); currentSquareIndex = numOfRecs; numOfRecs++; repaint(); } } @Override public void remove(int n) { if (n < 0 || n >= numOfRecs) { return; } numOfRecs--; rect[n] = rect[numOfRecs]; if (currentSquareIndex == n) { currentSquareIndex = -1; } repaint(); } @Override public void mouseMoved(MouseEvent event) { int x = event.getX(); int y = event.getY(); if (getRec(x, y) >= 0) { setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); } else { setCursor(Cursor.getDefaultCursor()); } } @Override public void mouseDragged(MouseEvent event) { int x = event.getX(); int y = event.getY(); if (currentSquareIndex >= 0) { Graphics graphics = getGraphics(); graphics.setXORMode(getBackground()); ((Graphics2D) graphics).draw(rect[currentSquareIndex]); rect[currentSquareIndex].x = x; rect[currentSquareIndex].y = y; ((Graphics2D) graphics).draw(rect[currentSquareIndex]); graphics.dispose(); } } public static void main(String[] args) { JFrame jFrame = new JFrame(); jFrame.setTitle(""); jFrame.setSize(300, 200); jFrame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); Container cPane = jFrame.getContentPane(); cPane.add(new DrawSketch()); jFrame.setVisible(true); }}
用户点评