doAction и graphPanel объявляются дважды - один раз на уровне класса, затем снова в методе:
private JPanel controls,graphPanel; // declared here first
private JButton doAction; // declared here first
public outer(){
JPanel controls = new JPanel(); // Whoops, declared here again
JButton doAction = new JButton("Do stuff"); // Whoops, declared here again
doAction.addActionListener(this);
controls.add(doAction);
JPanel graphPanel = new JPanel(); // Whoops, declared here again
...
В методе удалите объявление и сделайте им простые присваивания, например:
controls = new JPanel(); // no leading 'JPanel'
Сделайте это, и дополнительный код перекраски не вызовет NPE