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
![](http://3.bp.blogspot.com/_oL-2868MP8o/TE-rPmWzUtI/AAAAAAAAABw/ii2zzQUfDEU/s1600/vazia.bmp)
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,