I'm a first-year Java student, so please go easy on me.

I'm trying to create a GUI that allows generates a bill for mechanic services. I've defined the Swing components in an outer class, then define an inner class to do the event handling and logic. Problem is, the inner class doesn't recognize any of the components from the outer class, so I can't even get a clean compile.

Here's the code for the GUI/processor. (I actually execute another class containing only a "main" method that instantiates the JoesAuto class.)

----
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JoesAuto extends JFrame

{
final private double OIL_CHANGE_CHARGE = 26.00;
final private double LUBE_JOB_CHARGE = 18.00;
final private double RAD_FLUSH_CHARGE = 30.00;
final private double TRAN_FLUSH_CHARGE = 80.00;
final private double INSPECTION_CHARGE = 15.00;
final private double MUFFLER_REPL_CHARGE = 100.00;
final private double TIRE_ROTATE_CHARGE = 20.00;

// constructor
public JoesAuto()
{
// superclass constructor
super("Service invoice");
// instantiate a frame
JFrame invoice = new JFrame();

// build a panel for the routine services checkboxes
JPanel routineServicesPanel = new JPanel();
routineServicesPanel.setLayout(new GridLayout(7, 1));
routineServicesPanel.setBorder(BorderFactory.createTitledBorder("Standard Services"));

// build the routine services checkboxes
final JCheckBox oilChange = new JCheckBox("Oil change -- $" + OIL_CHANGE_CHARGE);
final JCheckBox lubeJob = new JCheckBox("Lube job -- $" + LUBE_JOB_CHARGE);
final JCheckBox radFlush = new JCheckBox("Radiator flush -- $" + RAD_FLUSH_CHARGE);
final JCheckBox tranFlush = new JCheckBox("Transmission flush -- $" + TRAN_FLUSH_CHARGE);
final JCheckBox inspection = new JCheckBox("Inspection -- $" + INSPECTION_CHARGE);
final JCheckBox mufflerRepl = new JCheckBox("Muffler replacement -- $" + MUFFLER_REPL_CHARGE);
final JCheckBox tireRotate = new JCheckBox("Tire rotation -- $" + TIRE_ROTATE_CHARGE);

// add the routine services checkboxes to the routine services panel
routineServicesPanel.add(oilChange);
routineServicesPanel.add(lubeJob);
routineServicesPanel.add(radFlush);
routineServicesPanel.add(tranFlush);
routineServicesPanel.add(inspection);
routineServicesPanel.add(mufflerRepl);
routineServicesPanel.add(tireRotate);

// place the routine services panel at the top of the frame
add(routineServicesPanel, BorderLayout.NORTH);

// build a panel for the custom services text fields
JPanel customServicesPanel = new JPanel();
customServicesPanel.setLayout(new GridLayout(2, 3));
customServicesPanel.setBorder(BorderFactory.createTitledBorder("Custom Services"));

// build the custom services text fields
final JTextField customService = new JTextField("Service: ");
final JTextField customParts = new JTextField("Parts: ");
final JTextField customLabor = new JTextField("Labor: ");
final JTextField customTotal = new JTextField("Total: ");
customTotal.setEditable(false);

// add the custom services text fields to the custom services panel
customServicesPanel.add(customService);
customServicesPanel.add(customParts);
customServicesPanel.add(customLabor);
customServicesPanel.add(customTotal);

// place the custom services panel in the center of the frame
add(customServicesPanel, BorderLayout.CENTER);

// build a panel for the total and the action button
JPanel displayPanel = new JPanel();

// build labels and associated text/buttons
final JLabel totalLabel = new JLabel("TOTAL: ");
final JTextField total = new JTextField("$0000.00");
final JButton calculate = new JButton("Calculate");

// add a listener to the calculate button
CalcButtonListener listener = new CalcButtonListener();
// register the button listener
calculate.addActionListener(listener);

// add the display fields to the display panel
displayPanel.add(totalLabel);
displayPanel.add(total);
displayPanel.add(calculate);

// place the display panel at the bottom of the frame
add(displayPanel, BorderLayout.SOUTH);

// complete the frame definition
setSize(700, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);


} // terminates JoesAuto constructor

// build a private inner class to process the interrupt and
// handle the logic
// this class is still within the outer class, but not within the constructor
private class CalcButtonListener implements ActionListener
{

// the interrupt handler if the calculate button is clicked
public void actionPerformed(ActionEvent e)
{
// local variables
double routineCharges = 0;
double customPartsCharges = 0;
double customLaborCharges = 0;
double customTotalCharges = 0;
double totalCharges = 0;
JoesAuto jac = new JoesAuto();

// accumulate charges for the routine services
// ERROR "oilChange cannot be resolved"
// ERROR [this error occurs with lubeJob, radFlush, tranFlush ... as well]
if (oilChange.isSelected())
{
routineCharges =+ OIL_CHANGE_CHARGE;
}
if (lubeJob.isSelected())
{
routineCharges =+ LUBE_JOB_CHARGE;
}
if (radFlush.isSelected())
{
routineCharges =+ RAD_FLUSH_CHARGE;
}
if (tranFlush.isSelected())
{
routineCharges =+ TRAN_FLUSH_CHARGE;
}
if (inspection.isSelected())
{
routineCharges =+ INSPECTION_CHARGE;
}
if (mufflerRepl.isSelected())
{
routineCharges =+ MUFFLER_REPL_CHARGE;
}
if (tireRotate.isSelected())
{
routineCharges =+ TIRE_ROTATE_CHARGE;
}

// calculate custom charges from user entry
// ERROR "customParts cannot be resolved
customPartsCharges = Double.parseDouble(customParts.getText());
// ERROR "customLabor cannot be resolved
customLaborCharges = Double.parseDouble(customLabor.getText()) * 20.0;
customTotalCharges = customPartsCharges + customLaborCharges;
customTotal.setText("Total: " + customTotalCharges);

// sum routine charges and custom charges
totalCharges = customPartsCharges + customLaborCharges + routineCharges;

// display summed charges
// ERROR "displayPanel cannot be resolved
total.setText("Total: " + totalCharges);

} // terminates the actionPerformed method
} // terminates the private inner class
} // terminates JoesAuto class

----
The errors are marked with comments that say ERROR.

Can anybody help me out? I know it's just something stupid, but I can't find it.

Thanks in advance.