Estou criando uma aplicação que ao clicar em um botão seja desenhado algo. mas se a janela for redimensionada o desenho apaga. quero manter o desenho intacto.
Segue o código que esta dentro do botão.
Graphics2D g = (Graphics2D) jPanelViga.getGraphics();
int altura, largura, x, y;
g.setColor(Color.red);
altura = 10;
largura = 370;
x = 100;
y = 271;
g.fillRect(x, y, largura, altura);
Você não precisa chamar o paintComponent diretamente, ele é chamado automaticamente. Basta adicionar seu JPanel customizado num JFrame. Para forçar a atualização, você pode chamar o método repaint() ou revalidate() do JFrame ou do JPanel (não lembro qual deles é necessário, ou se precisa ambos).
Outra dica é iniciar sua janela usando a thread do Swing, que cuida da atualização de componentes na tela, dentre outras coisas. Exemplo:
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
public class Janela extends JFrame{
public Janela(){
setExtendedState(JFrame.MAXIMIZED_BOTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(500, 500));
setSize(getPreferredSize());
getContentPane().add(new Painel());
}
public static void main(String args[]){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Janela().setVisible(true);
}
});
}
class Painel extends JPanel{
protected void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
g2.drawLine(0,0, 100, 100);
g2.dispose();
}
}
}