Código "sem erros" mas não funciona

3 respostas
G

E ae galera, blz? :cool:

To resolvendo o exercício 12.16 aki dos Deitel 4th ed.

Consiste em criar um prog q de acordo com a tecla q vc digitar, desenha uma forma geométrica diferente, jah implementei o q era necessário mas não consigo q nenhum resultado saia na tela, nenhuma forma eh desenhada…

segue código:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Drawer extends JFrame {
	private int xIni = - 10, yIni = -10, xFin, yFin;
	private char what = 'c';
	private Handler handler;
	
	public Drawer()
	{
		super ( "Drawer?" );
					
		handler = new Handler();
		addMouseListener ( handler );
		
		addKeyListener ( 
				
				new KeyAdapter() {
					
					public void keyPressed ( KeyEvent event )
					{
						if ( event.getKeyCode() == 'c' )
							what = 'c';
						
						else if ( event.getKeyCode() == 'o' )
							what = 'o';
						
						else if ( event.getKeyCode() == 'r' )
							what = 'r';
						
						else if ( event.getKeyCode() == 'l' )
							what = 'l';
					}
				}
			);
						
		setSize ( 300, 300 );
		setVisible ( true );
	}
	
	public void paint ( Graphics g )
	{
		switch ( what ) {
			case 'c' : g.drawOval ( xIni, yIni, handler.width,
					handler.width );  break;
			
			case 'o' : g.drawOval ( xIni, yIni, handler.heigth,
					handler.width ); break;		
			
			case 'r' : g.drawRect ( xIni, yIni, handler.heigth,
					handler.width ); break;
					
			case 'l' : g.drawLine ( xIni, yIni, handler.heigth,
					handler.width ); 		
		}
	}
	
	public static void main ( String[] args )
	{
		Drawer app = new Drawer();
		
		app.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
	}
	
	private class Handler extends MouseAdapter {
		private int tempX, tempY;
		public int heigth = -10, width = -10;
		
		public void mousePressed ( MouseEvent event )
		{
			xIni = event.getX();
			yIni = event.getY();
			checker();
		}
		
		public void mouseReleased ( MouseEvent event )
		{
			xFin = event.getX();
			yFin = event.getY();
			checker();
		}
		
		public void checker() 
		{
			if ( xIni > xFin ) {
				tempX = xIni;
				xIni = xFin;
				xFin = tempX;
			}
			
			if ( yIni > yFin ) {
				tempY = yIni;
				yIni = yFin;
				yFin = tempY;
			}
			
			
		}
		
		public void setHeigth()
		{
			heigth = ( yFin - yIni );
		}
		
		public void setWidth()
		{
			width = ( xFin - xIni );
		}
	} 
}

Alguém conseguiu enxergar meu erro ae?

[]'s

3 Respostas

M

olhando por cima notei que voce tem os metodos setHeigth() e setWidth() mas nao utiliza eles, nao seria isso ?

C

Olá,
Vc deve fazer um repaint() quando a tecla é apertada a fim de pintar a tela com a forma geométrica que vc quer!

this.repaint();

Falow!

G

Ae galera, resolvido o prob :grin:

maluquol : Realmente eu tinha feito os métodos mas não estava usando-os !! :oops:

Mas agora ta certin e funcionando como eu queria.

clv : Não é redundante esse this antes do repaint?

Segue o código certo caso haja interesse de alguém:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Drawer extends JFrame {
	private int xIni = -10, yIni = -10, xFin, yFin, heigth, width;
	private char what = 'c';
	private Handler handler;
	
	public Drawer()
	{
		super ( "Drawer?" );
		
		addKeyListener ( 
				
				new KeyAdapter() {
					
					public void keyPressed ( KeyEvent event )
					{
						if ( event.getKeyChar() == 'c' )
							what = 'c';
						
						else if ( event.getKeyChar() == 'o' )
							what = 'o';
						
						else if ( event.getKeyChar() == 'r' )
							what = 'r';
						
						else if ( event.getKeyChar() == 'l' )
							what = 'l';
						
					}
				}
			);
						
		handler = new Handler();
		addMouseListener ( handler );
		
		setSize ( 300, 300 );
		setVisible ( true );
	}
	
	public void paint ( Graphics g )
	{
		super.paint ( g );
		
		if ( what == 'c' )
			g.drawOval ( xIni, yIni, width , width );
		
		else if ( what == 'o' )
			g.drawOval ( xIni, yIni, width , heigth );
		
		else if ( what == 'r' )
			g.drawRect ( xIni, yIni, width , heigth );
		
		else if ( what == 'l' )
			g.drawLine ( xIni, yIni, width , heigth );
		
	}
	
	public static void main ( String[] args )
	{
		Drawer app = new Drawer();
		
		app.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
	}
	
	private class Handler extends MouseAdapter {
		private int tempX, tempY;
				
		public void mousePressed ( MouseEvent event )
		{
			xIni = event.getX();
			yIni = event.getY();
		}
		
		public void mouseReleased ( MouseEvent event )
		{
			xFin = event.getX();
			yFin = event.getY();
			checker();
		}
		
		public void checker()
		{
			int tempX, tempY;
			
			if ( xIni > xFin ) {
				tempX = xIni;
				xIni = xFin;
				xFin = tempX;
			}
		
			if ( yIni > yFin ) {
				tempY = yIni;
				yIni = yFin;
				yFin = tempY;
			}
			heigth = ( yFin - yIni );
			width = ( xFin - xIni );
			repaint();
		}
		
	} 
}

Valeu
[]'s

Criado 23 de junho de 2005
Ultima resposta 24 de jun. de 2005
Respostas 3
Participantes 3