Ridefinire paintComponent() è corretto.
Ma non sarebbe più semplice fare così? 
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MiddlePanel extends JPanel {
MiddlePanel() {
super(new BorderLayout());
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
int width = getWidth();
int height = getHeight();
for(int i=0; i<width; i+=20) {
g.drawLine(i,0,i,height);
g.drawLine(0,i,width,i);
}
}
}
class FrameExample extends JFrame {
private MiddlePanel mp;
FrameExample() {
mp = new MiddlePanel();
add(mp);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void makeGUI() {
FrameExample fe = new FrameExample();
fe.setSize(800,600);
fe.setVisible(true);
}
public static void main(String[] args) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
makeGUI();
}
});
} catch(Exception e) {}
}
}