Olá, pessoal! Sou novato aqui no fórum.
Estou fazendo um projetinho sobre física do ensino médio para faculdade. Para isso estou usando uma JFrame como janela principal e desenhando no modo gráfico todas as telas em JPanel para ir exibindo na janela principal conforme for preciso. Porém me deparei com um problema, em determinada tela, onde eu preciso fazer um desenho, nada acontece, a tela permanece cinza. Em princípio pensei que o código gerado pelo modo gráfico do NETBEANS pudesse estar interferindo em algo, mas eu fiz na mão essa tela e mesmo assim o problema persiste. Alguém pode me ajudar? Seguem o código da JFrame janela principal e JPanel que a tela do desenho, respectivamente:
Janela principal do programa
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
public class Principal extends JFrame implements ActionListener {
JMenuBar menubar;
JMenu menuArquivo, menuAjuda;
JMenuItem itemSair, itemSobre;
JButton btn_lin,
btn_lsim,
btn_sup,
btn_ssim,
btn_vol,
btn_vsim,
btn_inicio;
JPanel pn_centro, pn_botoes;
Inicio tela_inicio;
Linear tela_linear;
public Principal() {
super("Dilatação Térmica 1.0");
setLayout(new BorderLayout());
tela_inicio = new Inicio();
menubar = new JMenuBar();
menuArquivo = new JMenu("Arquivo");
menuAjuda = new JMenu("Ajuda");
itemSair = new JMenuItem("Sair");
itemSobre = new JMenuItem("Sobre");
btn_lin = new JButton("Dilatação Linear");
btn_lsim = new JButton("Simular");
btn_sup = new JButton("Dilatação Superficial");
btn_ssim = new JButton("Simular");
btn_vol = new JButton("Dilatação Volumétrica");
btn_lsim = new JButton("Simular");
btn_inicio = new JButton("Início");
pn_botoes = new JPanel();
pn_centro = new JPanel();
iniciaEventos();
desenhaTela();
setSize(800,600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void iniciaEventos(){
itemSair.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
itemSobre.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFrame f_sobre = new JFrame("Dilatação Térmica 1.0");
f_sobre.setSize(200,100);
f_sobre.setVisible(true);
f_sobre.setLocation(getSize().width/2, getSize().height/2);
}
});
btn_lin.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pn_centro.removeAll();
pn_centro.add(new Linear());
JButton btn_lin2 = new JButton("Simular");
pn_botoes.add(btn_lsim);
pn_botoes.remove(btn_lin);
pn_botoes.remove(btn_vol);
pn_botoes.remove(btn_sup);
pn_centro.revalidate();
repaint();
}
});
btn_lsim.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pn_centro.removeAll();
pn_centro.add(new LinearS());
pn_botoes.remove(btn_lsim);
pn_centro.revalidate();
repaint();
}
});
btn_inicio.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pn_centro.removeAll();
desenhaTela();
pn_centro.revalidate();
repaint();
}
});
}
public void desenhaTela(){
pn_centro.add(tela_inicio);
add(pn_centro,BorderLayout.CENTER);
menubar.add(menuArquivo);
menubar.add(menuAjuda);
menuArquivo.add(itemSair);
menuAjuda.add(itemSobre);
add(menubar, BorderLayout.NORTH);
menuArquivo.setMnemonic('a');
menuAjuda.setMnemonic('h');
itemSair.setMnemonic('s');
pn_botoes.setLayout(new FlowLayout());
pn_botoes.add(btn_inicio);
pn_botoes.add(btn_lin);
pn_botoes.add(btn_sup);
pn_botoes.add(btn_vol);
//pn_centro.setOpaque(true);
//pn_centro.setBackground(Color.WHITE);
add(pn_botoes, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
}
public static void main(String args[]){
Principal teste = new Principal();
}
}
JPanel da tela a ser desenhada, chamada pelo evento actionPerformed do botão btn_lsim na janela principal
import java.awt.geom.GeneralPath;
import javax.swing.*;
import java.awt.*;
public class LinearS extends JPanel
{
public LinearS(){
this.setOpaque(true);
repaint();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
GeneralPath cubo = new GeneralPath();
cubo.moveTo(100, 100);
cubo.lineTo(200, 100);
cubo.lineTo(200, 200);
cubo.lineTo(100, 200);
cubo.closePath();
cubo.moveTo(150, 150);
cubo.lineTo(250, 150);
cubo.lineTo(250, 250);
cubo.lineTo(150, 250);
cubo.closePath();
cubo.moveTo(150, 150);
cubo.lineTo(100, 100);
cubo.moveTo(250, 150);
cubo.lineTo(200, 100);
cubo.moveTo(250, 250);
cubo.lineTo(200, 200);
cubo.moveTo(150, 250);
cubo.lineTo(100, 200);
g2d.translate(100,100);
g2d.draw(cubo);
}
}

