publicclassShapeTest{publicstaticvoidmain(String[]args){intchoice=Integer.parseInt(JOptionPane.showInputDialog("Entra 1 para desenhar Retagulo."+"\nEntra 2 para desenhar Oval."));Shapepanel=newShape(choice);JFrameapplication=newJFrame();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);application.add(panel);application.setSize(300,300);application.setVisible(true);}}
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
publicclassShapeextendsJPanel{.......}
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
publicclassShapeextendsJPanel{.......}
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”.
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”.