Has intentado guardar la información dibujada y repintarlo cuando el usuario maximize la pantalla?
Ejemplo, si el usuario dibuja una linea de x.y=0,0 a x1,y1=100,200, guardar esa información en una lista y cuando maximize la aplicación recorrer la lista y volver a pintar lo ya pintado.
class Linea { privatefinalPoint x1y1; privatefinalPoint x2y2;
public Linea(int x1, int y1, int x2, int y2 ){
x1y1 = newPoint( x1, y1 );
x2y2 = newPoint( x2,y2 ); } }
..... // en mouse dragged o uno de esos
lineas.add(new Linea( x1, y1, x2, y2 ));
// en repaint :
for( Linea linea : lineas ){
g.drawLine( linea.x1, y1 etc. etc
No veo algo así en el código que pones. Si no lo haces, vas a tener problemas en AWT o en Swing cuando tengas que repintar el componente.
Aunque esta recomendación es más de estilo que de eficiencia u otra cosa, como mencionas que es de tus primero programas, vale la pena mencionarlo para que no te cueste trabajo después.
// Microbuffer para crear la linea finalPoint[] puntoAnterior = newPoint[1]; // Este es el estado de lo que se ha dibujado: finalList<Linea> lineas = newArrayList<Linea>();
// La recomendación es hacer una subclase de Canvas: // la descripción en : //http://download.oracle.com/javase/6/docs/api/java/awt/Canvas.html finalCanvas canvas = newCanvas(){ publicvoid paint(Graphics g ){
g.setColor(Color.blue); for( Linea l : lineas ){
g.drawLine( l.a.x, l.a.y, l.b.x, l.b.y); } } };
// Oir los clicks:
canvas.addMouseListener(newMouseAdapter(){ publicvoid mouseClicked(MouseEvent e ){ System.out.println( e ); if( puntoAnterior[0] == null){
puntoAnterior[0] = e.getPoint(); }else{
lineas.add(new Linea( puntoAnterior[0], e.getPoint()));
puntoAnterior[0] = null; }
canvas.repaint(); }
}); // volver a pintar
frame.addWindowListener(newWindowAdapter(){ publicvoid windowDeiconified(WindowEvent e){
canvas.repaint(); } });
frame.add( canvas );
frame.setVisible(true); } } class Linea { finalPoint a; finalPoint b;
Linea(Point a, Point b){ this.a = a; this.b = b; } }
Importante, el código mostrado esta lleno de "otras" malas prácticas, no tomar como referencia.
Revisalo y considera utilizar swing, que técnicamente es igual de difícil que AWT, pero tiene los beneficios de ser muchísimo más potente.
Submitted by fernandomt_08 on Lun, 02/07/2011 - 16:59.
Si efectivamente,a pesar de que soy nuevo con java,había pensado en almacenar todos los puntos que se iban agregando,pero debido a mi falta de experiencia con java,pensé que existía algún metodo de la clase graphics que me facilitara solucionar este problema
Hagalo por usted mismo
Como lo has dicho la red es muy grande existen diversos libros y manuales sólo es cuestion DE LEER
Has intentado guardar la
Has intentado guardar la información dibujada y repintarlo cuando el usuario maximize la pantalla?
Ejemplo, si el usuario dibuja una linea de x.y=0,0 a x1,y1=100,200, guardar esa información en una lista y cuando maximize la aplicación recorrer la lista y volver a pintar lo ya pintado.
private final Point x1y1;
private final Point x2y2;
public Linea( int x1, int y1, int x2, int y2 ) {
x1y1 = new Point( x1, y1 );
x2y2 = new Point( x2,y2 );
}
}
.....
// en mouse dragged o uno de esos
lineas.add( new Linea( x1, y1, x2, y2 ) );
// en repaint :
for( Linea linea : lineas ) {
g.drawLine( linea.x1, y1 etc. etc
No veo algo así en el código que pones. Si no lo haces, vas a tener problemas en AWT o en Swing cuando tengas que repintar el componente.
Revisando el código. Algunas
Revisando el código.
Algunas recomendaciones que te servirán en tu código:
1.- Cuando seleccionas el color estas escribiendo el nombre en un string tipo:
...
if( elec.equals("Rojo") || elec.equals("Verde" .. etc. etc ) {
colorl = elec;
}
...
Y luego al pintar estas comparando ese valor para saber que podrás en el color a pintar.
g.setColor( Color.red );
} else if ...
Mejor sería que al evaluarlo, pudieras directamente un objeto tipo color.
String colorl;Color colorSeleccionado;
...
if( elec.equals("Rojo") ) {
colorSeleccionado = Colo.red;
} else if ..
...
Y luego en al pintar ya no lo seteas.
2.- Usa los if's con llave siempre, aunque sea de una sola línea, crea un buen hábito:
SI
color = Color.red;
}
No
color = Color.red;
Aunque esta recomendación es más de estilo que de eficiencia u otra cosa, como mencionas que es de tus primero programas, vale la pena mencionarlo para que no te cueste trabajo después.
Más comentarios en seguida.
Ahi te va un ejemplo:
Este ejemplo ya mantiene el estado cuando se minimiza/maximiza la app.
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
class Dibujito {
public static void main( String ... args ) {
Frame frame = new Frame("Da click en dos puntos");
// Microbuffer para crear la linea
final Point[] puntoAnterior = new Point[1];
// Este es el estado de lo que se ha dibujado:
final List<Linea> lineas = new ArrayList<Linea>();
// La recomendación es hacer una subclase de Canvas:
// la descripción en :
//http://download.oracle.com/javase/6/docs/api/java/awt/Canvas.html
final Canvas canvas = new Canvas() {
public void paint( Graphics g ) {
g.setColor( Color.blue );
for( Linea l : lineas ) {
g.drawLine( l.a.x, l.a.y, l.b.x, l.b.y );
}
}
};
// Oir los clicks:
canvas.addMouseListener( new MouseAdapter(){
public void mouseClicked( MouseEvent e ) {
System.out.println( e );
if( puntoAnterior[0] == null ) {
puntoAnterior[0] = e.getPoint();
} else {
lineas.add( new Linea( puntoAnterior[0], e.getPoint() ));
puntoAnterior[0] = null;
}
canvas.repaint();
}
});
// volver a pintar
frame.addWindowListener( new WindowAdapter() {
public void windowDeiconified(WindowEvent e) {
canvas.repaint();
}
});
frame.add( canvas );
frame.setVisible( true );
}
}
class Linea {
final Point a;
final Point b;
Linea( Point a, Point b) {
this.a = a;
this.b = b;
}
}
Importante, el código mostrado esta lleno de "otras" malas prácticas, no tomar como referencia.
Revisalo y considera utilizar swing, que técnicamente es igual de difícil que AWT, pero tiene los beneficios de ser muchísimo más potente.
Espero que esto te ayude
Gracias por tu ayuda
Si efectivamente,a pesar de que soy nuevo con java,había pensado en almacenar todos los puntos que se iban agregando,pero debido a mi falta de experiencia con java,pensé que existía algún metodo de la clase
graphics
que me facilitara solucionar este problemaDe nada. Tu borraste el
De nada.
Tu borraste el contenido? No lo hagas, yo no veo nada malo en la pregunta original y puede ser que a alguién más le sirva en el futuro.