import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import javax.swing.JFrame; /* * Created on Aug 30, 2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ /** * @author dano * * Try flipping individual objects or moving them around on the screen * */ public class HelloMouseObject extends JFrame implements MouseMotionListener, MouseListener, KeyListener { int x, y; boolean flipped ; int red; static HelloMouseObject frame; ArrayList marks = new ArrayList(); Mark currentMark; public void paint(Graphics g) { //this is where we paint //g.fillOval(x - 2, y - 2, 4, 4); g.clearRect(0,0,frame.getWidth(), frame.getHeight()); g.setColor(new Color(red,0,0)); for (int i = 0; i < marks.size(); i++){ Mark thisMark = (Mark) marks.get(i); thisMark.drawMe(g); } } public void destroy() { System.out.println("Kill Application"); frame.setVisible(false); frame.dispose(); System.exit(0); } public static void main(String[] args) { //this is called when it is an application frame = new HelloMouseObject();//"rtsp://128.122.151.241/sve204/test1.mov"); frame.addWindowListener(new java.awt.event.WindowAdapter() { //for public void windowClosing(java.awt.event.WindowEvent e) { frame.destroy(); } }); frame.setTitle(frame.getClass().getName()); frame.setSize(320, 240); frame.setVisible(true); frame.addMouseMotionListener(frame); frame.addMouseListener(frame); frame.addKeyListener(frame); } /* * (non-Javadoc) * * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent) */ public void mouseDragged(MouseEvent arg0) { // if (currentMark != null){ x = arg0.getX(); y = arg0.getY(); currentMark.addAMark(x,y); // } repaint(); } public void mouseMoved(MouseEvent e) { } public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent e) { // turn off all the existing marks for (int i = 0; i < marks.size(); i++){ Mark thisMark = (Mark) marks.get(i); thisMark.select(false); } currentMark = null; //see if you are over a mark now for (int i = 0; i < marks.size(); i++){ Mark thisMark = (Mark) marks.get(i); if (thisMark.checkMe(e.getX(), e.getY())){ thisMark.select(true); repaint(); currentMark = thisMark; break; //don't go any further with this repeat loop } } //if they did not click on an existing mark if (currentMark == null){ currentMark = new Mark(e.getX(),e.getY()); marks.add(currentMark); } } public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } public void keyPressed(KeyEvent e) { String pressed = KeyEvent.getKeyText(e.getKeyCode()); System.out.println("pressed" + pressed + currentMark); if (currentMark != null){ if ( pressed.equals("F")) currentMark.flip(); repaint(); } } public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } } class Mark{ int xOrigin, yOrigin; ArrayList dots = new ArrayList(); Rectangle myRect; boolean flipped; boolean iAmIt; Mark(int _initX, int _initY){ xOrigin = _initX; yOrigin = _initY; } public void addAMark(int _x, int _y){ Point localPoint = new Point(_x-xOrigin, _y - yOrigin); dots.add(localPoint); } public boolean checkMe(int _x, int _y){ return (myRect.contains(_x,_y)); } public void select(boolean _s){ iAmIt = _s ; } public void flip(){ flipped = ! flipped; } public void drawMe(Graphics g){ int bigestX= 0; int bigestY = 0; int smallestX= 1000; int smallestY = 1000; for(int i =0; i < dots.size(); i++){ Point thisPoint = (Point) dots.get(i); if (flipped){ ///?????? }else{ g.drawOval(xOrigin + thisPoint.x -2 , yOrigin + thisPoint.y-2, 4, 4); } if (thisPoint.x + xOrigin > bigestX) bigestX = thisPoint.x + xOrigin; if (thisPoint.y + yOrigin> bigestY) bigestY = thisPoint.y + yOrigin; if (thisPoint.x + xOrigin< smallestX) smallestX = thisPoint.x + xOrigin ; if (thisPoint.y + yOrigin< smallestY) smallestY = thisPoint.y + yOrigin ; } myRect = new Rectangle(smallestX,smallestY,bigestX-smallestX,bigestY-smallestY); if (iAmIt){ g.setColor(new Color(233,0,0)); g.drawRect(myRect.x, myRect.y, myRect.width, myRect.height); g.setColor(new Color(0,0,0)); } } }