Compilador não funciona!

4 respostas
jsnpereira

Pessoal!

li o livro e programei o java não funcionou, mas fiquei estranho, fiz mesmas do livro.
veja os comandos em baixo.

A classe Shape

public class Shape extends JFrame {
	
	private int choice;
	
	public Shape(int userchoice){
		
		choice = userchoice;
	}
	
	public void paintComponet(Graphics g){
		
		super.paintComponents(g);
		
		for(int i=0 ; i < 10; i++){
			
			switch(choice){
				case 1:
					g.drawRect(10 + i * 10, 10 + i * 10, 50 + i * 10 , 50 + i * 10);
				break;
				case 2:
					g.drawOval(10 + i * 10,10 + i * 10, 50 + i * 10, 50 + i * 10);
				break;
			}
		}
	}
}

Classe para executar a tela.

public class ShapeTest {
	
	public static void main(String[] args) {
		
		int choice = Integer.parseInt(JOptionPane.showInputDialog("Entra 1 para desenhar Retagulo." +
													"\nEntra 2 para desenhar Oval."));
		
		Shape panel = new Shape(choice);
		
		JFrame application = new JFrame();
		
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		application.add(panel);
		application.setSize(300,300);
		application.setVisible(true);
	}

}

vê se puder me ajudar a conferir os erros.

Obrigado!!

4 Respostas

discorpio

Boa noite Jsnpereira.

Não funcionou porque voce está tentando colocar um JFrame dentro de outro JFrame e isto não é possível no Java, porque JFrames são formulários containers de componentes e não de outros JFrame.

Mude a herança (extenção) da classe Shape para JPanel, assim

public class Shape extends JPanel { 
      ....
      ...
  }

Agora rode e vê se funciona…

jsnpereira

discorpio:
Boa noite Jsnpereira.

Não funcionou porque voce está tentando colocar um JFrame dentro de outro JFrame e isto não é possível no Java, porque JFrames são formulários containers de componentes e não de outros JFrame.

Mude a herança (extenção) da classe Shape para JPanel, assim

public class Shape extends JPanel { 
      ....
      ...
  }

Agora rode e vê se funciona…

Funcionou e mais deve um problemas… o desenho ficou vazio

veja a imagem

espero que alguéns possa me ajudar…

discorpio

Boa noite Jsnpereira.

Existe um outro erro que não percebi e que está dentro da classe Shape, o método paintComponent está escrito de maneira errada, com “paintComponet” e quando voce chama o construtor da classe JPanel com super, voce invoca o método “paintComponents” e não o “paintComponent”. O método paintComponents não existe na classe JComponent e ele não é automaticamente invocado, por isso não desenha nada.

Além disse, se não me falhe a memória, o método “paintComponent” está declarado na classe JComponent, de onde a classe JPanel herda, com o modificador “protected”.

Voce escreveu assim:

public void paintComponet(Graphics g){   
           
        super.paintComponents(g);   
        .....
        .....
 }

O certo é assim:

protected void paintComponent(Graphics g){   
           
        super.paintComponent(g);   
        .....
        .....
 }

Outra dica, centralize o seu formulário “Application” com este método abaixo:

application.setLocationRelativeTo(null);

Vê se agora dá certo.

jsnpereira

discorpio:
Boa noite Jsnpereira.

Existe um outro erro que não percebi e que está dentro da classe Shape, o método paintComponent está escrito de maneira errada, com “paintComponet” e quando voce chama o construtor da classe JPanel com super, voce invoca o método “paintComponents” e não o “paintComponent”. O método paintComponents não existe na classe JComponent e ele não é automaticamente invocado, por isso não desenha nada.

Além disse, se não me falhe a memória, o método “paintComponent” está declarado na classe JComponent, de onde a classe JPanel herda, com o modificador “protected”.

Voce escreveu assim:

public void paintComponet(Graphics g){   
           
        super.paintComponents(g);   
        .....
        .....
 }

O certo é assim:

protected void paintComponent(Graphics g){   
           
        super.paintComponent(g);   
        .....
        .....
 }

Outra dica, centralize o seu formulário “Application” com este método abaixo:

application.setLocationRelativeTo(null);

Vê se agora dá certo.

Boa noite!

Já testamos que você diz isso comandos corretos, ainda está sem desenho da janela.

estou estranho!!

Atenciosamente,

Criado 27 de julho de 2010
Ultima resposta 28 de jul. de 2010
Respostas 4
Participantes 2