|
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
import java.util.List;
import java.util.ArrayList;
import areas.*;
public List<Area> areas;
public int editIndex;
public int polyVertexEditIndex;
public String editAction = "";
public abstract void onUpdate(boolean isPolygon);
public ImagePanel(){
this.addMouseListener(this);
}
public boolean loadImage (File f ){
try{
Image newImg = ImageIO. read(f );
if(newImg == null){return false;}
img = newImg;
setPreferredSize (new Dimension(img. getWidth(null), img. getHeight(null)));
repaint();
return true;
return false;
}
}
public void paintComponent (Graphics g ) {
super.paintComponent(g);
if(img != null){
g.drawImage(img, 0, 0, null);
}
for(int i = 0; i < areas.size(); i++){
if(i == editIndex){
g. setColor(new Color(255, 0, 0, 100 ));
}else{
g. setColor(new Color(0, 0, 255, 100 ));
}
areas.get(i).draw(g);
}
}
boolean isPolygon = false;
switch(editAction){
case "rectA":
((RectangleArea)areas.get(editIndex)).a = e.getPoint();
break;
case "rectB":
((RectangleArea)areas.get(editIndex)).b = e.getPoint();
break;
case "circleCenter":
((CircleArea)areas.get(editIndex)).center = e.getPoint();
break;
case "circleRadius":
Point center = ((CircleArea )areas. get(editIndex )). center;
int dx = e.getPoint().x - center.x;
int dy = e.getPoint().y - center.y;
((CircleArea )areas. get(editIndex )). r = (int)Math. round(Math. sqrt(dx *dx + dy *dy ));
break;
case "polyVertex":
((PolygonArea)areas.get(editIndex)).vertices.set(polyVertexEditIndex, e.getPoint());
isPolygon = true;
break;
}
repaint();
onUpdate(isPolygon);
}
}
|
|