Java

Hola, soy estudiante de ingeniería y tengo un programa en java el cual funciona con un canvas y unos cuantos botones.
Mi pregunta es como hago para que el canvas retorne a su estado inicial cada vez que yo presiono uno de los botones. Lo que pasa es que en este caso un botón me pinta una figura, pero cuando presiono otro botón me pinta la nueva figura encimi de la otra. Agradezco tu colaboración.

2 Respuestas

Respuesta
1
Cuando presiones cualquier botón en el código, llama a la clase->procedimiento (public o protected) donde se inicialice el canvas, o si no lo ves prueba a con ( canvas. Restart o algo así) es que no me acuerdo, o en último caso créale de nuevo cada vez que pulses un botón...
Respuesta
1
Seria interesante tener más información, puedes suministrar la porción de código.
Este es el canvas:
import java.awt.*;
import java.awt.Graphics;
import java.util.*;
import javax.swing.*;
public class CanvasFigura extends Canvas{
ImageIcon figura;
int x,y,c;
public void paint(Graphics g){
if(c==1){g.translate(250,250);}
if(c==2){g.translate(0,0);}
this.setBackground(Color.yellow);
figura = new ImageIcon("cross.gif");
figura.paintIcon(this,g,x*5,y*5);}
}
Aqui estan los metodos y escuchas:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class MueveFigura extends JFrame implements ActionListener{
Container contenedor = getContentPane();
BorderLayout miBorder = new BorderLayout(2,1);
JPanel miPanel = new JPanel();
JButton boton1 = new JButton("Cuadrado");
JButton boton2 = new JButton("Circular");
JButton boton3 = new JButton("Parabolico");
CanvasFigura miCanvas = new CanvasFigura();
DecimalFormat formato = new DecimalFormat();
public MueveFigura(){
contenedor.setLayout(miBorder);
boton1.addActionListener(this);
miPanel.add(boton1);
boton2.addActionListener(this);
miPanel.add(boton2);
boton3.addActionListener(this);
miPanel.add(boton3);
contenedor.add(miPanel,BorderLayout.NORTH);
contenedor.add(miCanvas,BorderLayout.CENTER);}
int r=0, z=-50;
int angulo=1;
public void actionPerformed(ActionEvent evt){
if(evt.getSource()==boton1){
miCanvas.c=2;
if (r<=30) {miCanvas.y+=1;r++;miCanvas.x=0;}
else
if (r<=80){miCanvas.x+=1;r++;miCanvas.y=30;}
else
if (r<=110){miCanvas.y-=1;r++;miCanvas.x=50;}
else
if (r<=160){miCanvas.x-=1;r++;miCanvas.y=0;}
else
r=0;}
else
if(evt.getSource()==boton2){
miCanvas.c=1;
miCanvas.y=(int)(20*Math.sin(angulo));
miCanvas.x=(int)(20*Math.cos(angulo));
angulo++;
r=0;}
else
if(evt.getSource()==boton3){
miCanvas.c=1;
miCanvas.x=z;
miCanvas.y=-(int)(0.009*z*z);
z++;
r=0;}
miCanvas.repaint();}
}
Este es el main:
import java.awt.event.*;
public class UsoMueveFigura{
public static void main(String a[]){
MueveFigura miFigura = new MueveFigura();
miFigura.setSize(600, 600);
miFigura.show();
miFigura.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);}});}}
Disculpa que no he tenido tiempo de analizar tu código con más detalle, pero a primera vista, creo que lo que quieres hacer, es mostrar una ventana con botones y ante el evento de pulsar un botón mostrar la imagen, por lo visto, ¿no?.
Al no mirar detalladamente el código no puedo aseverar el 100%, pero el problema seguramente es que estas usadando elementos de AWT y SWING, y los elementos de AWT(llamados de peso pesado), taparan el display de los elementos SWING(llamados de peso liviano).
Una solución, altternativa es usar JPanel en lugar de usar Canvas y veras que no tendrás problemas.
Si me queda tiempo este fin de semana me pondré a ver con más detalles tu código y ver si se puede corregir el uso del Canvas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas