Compilador não funciona!

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!!

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…

[quote=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…[/quote]

Funcionou e mais deve um problemas… o desenho ficou vazio

veja a imagem

espero que alguéns possa me ajudar…

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.

[quote=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.

[/quote]

Boa noite!

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

estou estranho!!

Atenciosamente,