Probablemente querrá hacer una subclase de JPanel
e implementar su propia forma de pintar los componentes que desea dibujar en el panel.
El enfoque básico probablemente estará en la línea de asignar un MouseListener
a la subclase de JPanel
, luego implementar la funcionalidad de pintura.
La idea básica puede ser algo a lo largo de la línea:
class MyCanvas extends JPanel implements MouseListener
{
Image img; // Contains the image to draw on MyCanvas
public MyCanvas()
{
// Initialize img here.
this.addMouseListener(this);
}
public void paintComponent(Graphics g)
{
// Draws the image to the canvas
g.drawImage(img, 0, 0, null);
}
public void mouseClicked(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
Graphics g = img.getGraphics();
g.fillOval(x, y, 3, 3);
g.dispose();
}
// ... other MouseListener methods ... //
}
El ejemplo anterior es incompleta (y no probado - que sin duda no se compilará), pero da una idea acerca de cómo poner en práctica una clase MyCanvas
en la que un usuario puede hacer clic y dibujar círculos.
El objeto img
se utiliza para contener la imagen del lienzo. El método paintComponent
se usa para pintar el objeto img
en el lienzo. En el método mouseClicked
, se recupera el objeto Graphics
asociado con img
con el fin de fillOval
en la imagen.
Como uno de los requisitos es pegar imágenes en el lienzo, puede ser una buena idea guardar algunas Image
que desea pegar en el lienzo. Tal vez algo en la línea de:
Image[] myImages; // Used to store images to paint to screen.
A continuación, en la rutina de pintar la imagen en img
almacenada en MyCanvas
:
g.drawImage(myImage[INDEX_OF_DESIRED_IMAGE], 0, 0, null);
Al utilizar el método del objeto Graphics
drawImage
, otros Image
s puede dibujarse en Image
s.
En cuanto a la pregunta sobre AWT y Swing, sí, es cierto que usted no quiere mezclar los componentes del AWT y Swing, ya que difieren en la forma en que hacen que los componentes GUI. AWT se basa en componentes pesados, lo que significa que son ventanas nativas para pintar la GUI, mientras que Swing se basa en componentes ligeros, lo que significa que la GUI es dibujada por Java sin usar componentes nativos.
Una buena guía sobre la diferencia de AWT y Swing se proporciona en el artículo Painting in AWT and Swing de Sun.
URL han cambiado desde 2009. Encontrado ubicación real del artículo en http://www.oracle.com/technetwork/java/painting-140037.html – Javier