package e104.skeleton ;
import javax.swing.JFrame ;
import java.awt.Component ;
import java.awt.Container ;
import java.awt.Graphics2D ;
import java.awt.Graphics ;
import java.awt.Dimension ;
import java.awt.Color ;
import java.awt.Rectangle ;
import java.awt.event.MouseAdapter ;
import java.awt.event.MouseMotionAdapter ;
import java.awt.event.MouseEvent ;
class PersistentCanvas extends Component {
Rectangle r = null ;
PersistentCanvas() {
}
public void paint(Graphics graphics) {
Graphics2D g = (Graphics2D)graphics ;
g.setColor(getBackground()) ;
g.fillRect(0, 0, getWidth(), getHeight()) ;
if (r==null) return ;
g.setColor(Color.LIGHT_GRAY) ;
g.fill(r) ;
g.setColor(Color.BLACK) ;
g.draw(r) ;
}
}
/**
* @author Nicolas Roussel (roussel@lri.fr)
*
*/
public class GraphicalEditor extends JFrame {
private PersistentCanvas canvas ;
public GraphicalEditor(String title, int width, int height) {
super(title) ;
Container pane = getContentPane() ;
canvas = new PersistentCanvas() ;
canvas.setBackground(Color.WHITE) ;
canvas.setPreferredSize(new Dimension(width,height)) ;
pane.add(canvas) ;
canvas.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
int width=0, height=0 ;
canvas.r = new Rectangle(evt.getX(), evt.getY(), width, height) ;
canvas.repaint() ;
}
public void mouseReleased(MouseEvent evt) {
canvas.r = null ;
canvas.repaint() ;
}
}) ;
canvas.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent evt) {
if (canvas.r==null) return ;
canvas.r.width = evt.getX() - canvas.r.x ;
canvas.r.height = evt.getY() - canvas.r.y ;
canvas.repaint() ;
}
}) ;
pack() ;
setVisible(true) ;
}
public static void main(String[] args) {
GraphicalEditor editor = new GraphicalEditor("GraphicalEditor",800,600) ;
editor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
}
}