/*
* Created on 29.10.2004
*/
package de.tutorials;
import java.awt.BasicStroke;
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.MouseMotionAdapter;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.plaf.basic.BasicGraphicsUtils;
/**
* @author Darimont
*
*/
public class Test39 extends JFrame {
private static final long serialVersionUID = 2868863481341142806L;
private BufferStrategy strategy;
private Point p0, p1;
private Rectangle selRect;
private Rectangle[] rects;
private BasicStroke storke = new BasicStroke(3.0F);
private Thread runner = new Thread() {
{
setPriority(MIN_PRIORITY);
}
public void run() {
while (true) {
Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
g.clearRect(0, 0, 400, 300);
g.setStroke(storke);
if (p0 != null && p1 != null) {
int xMin = 0, xMax = 0, yMin = 0, yMax = 0, dx = 0, dy = 0;
xMin = Math.min(p0.x, p1.x);
xMax = xMin == p0.x ? p1.x : p0.x;
yMin = Math.min(p0.y, p1.y);
yMax = yMin == p0.y ? p1.y : p0.y;
dx = xMax - xMin;
dy = yMax - yMin;
BasicGraphicsUtils.drawDashedRect(g, xMin, yMin, dx, dy);
selRect = new Rectangle(xMin, yMin, dx, dy);
for (int i = 0; i < rects.length; i++) {
Rectangle r = rects[i];
if (selRect.intersects(r)) {
g.fillRect(r.x, r.y, r.width, r.height);
}
}
}
for (int i = 0; i < rects.length; i++) {
Rectangle r = rects[i];
g.drawRect(r.x, r.y, r.width, r.height);
}
g.dispose();
strategy.show();
try {
sleep(30L);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
}
};
public Test39() {
super("Test39");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setIgnoreRepaint(true);
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent evt) {
p1 = evt.getPoint();
}
});
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
p0 = evt.getPoint();
}
});
createRects(rects = new Rectangle[5]);
setSize(400, 300);
setResizable(false);
setVisible(true);
createBufferStrategy(2);
strategy = getBufferStrategy();
}
private void createRects(final Rectangle[] rs) {
final int WIDTH = 50;
final int HEIGHT = 25;
rs[0] = new Rectangle(50,75,WIDTH,HEIGHT);
rs[1] = new Rectangle(100,320,WIDTH,HEIGHT);
rs[2] = new Rectangle(150,240,WIDTH,HEIGHT);
rs[3] = new Rectangle(250,190,WIDTH,HEIGHT);
rs[4] = new Rectangle(300,56,WIDTH,HEIGHT);
}
public static void main(String[] args) {
new Test39().start();
}
private void start() {
runner.start();
}
}