I am having a compile-time problem with a simple program I am writing. When I attempt to compile, I get the error "non-static variable this cannot be referenced from a static context". The error point to where I try to create a new instance of 'ConvertToOunce s' inside the main method. Any help would be greatly appreciated.
Here is my source code.
Here is my source code.
Code:
/******************************************************************************\
|
|Try to make gui for both Projects 2a and 2b
|
|
\******************************************************************************/
import javax.swing.*;
import javax.swing.JOptionPane.*;
import java.awt.*;
import java.awt.event.*;
public class WeightConverter extends JPanel{
//main method will instantiate and display GUI
public static void main(String[] args){
JFrame frame = new JFrame("Weight Converter");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane pane = new JTabbedPane();
pane.addTab ("Convert To Ounces", new ConvertToOuncesPane());
}
//ConvertToOuncesPane class will create the pane for converting to ounces.
class ConvertToOuncesPane{
//Set up new component identifiers
JLabel tonsLabel, stonesLabel, poundsLabel, ouncesLabel, resultLabel;
JTextField tonsField, stonesField, poundsField, ouncesField;
JButton btnConvert, btnClear, btnExit;
String resultString = "Total Number of Ounces: ";
/*****************************************************************************\
|
|this method will be the primary constructor method for the class
|
\*****************************************************************************/
public ConvertToOuncesPane(){
//set up the labels for the input boxes
tonsLabel = new JLabel("Enter number of tons:");
stonesLabel = new JLabel("Enter number of stones:");
poundsLabel = new JLabel("Enter number of pounds:");
ouncesLabel = new JLabel("Enter number of pounds:");
resultLabel = new JLabel(resultString + "---");
//set up the input boxes
tonsField = new JTextField(10);
stonesField = new JTextField(10);
poundsField = new JTextField(10);
ouncesField = new JTextField(10);
//set up the convert button and add action listener
btnConvert = new JButton("Convert");
btnConvert.addActionListener (new ConvertToListener());
//set up the clear button and add action listener
btnClear = new JButton("Clear");
btnClear.addActionListener (new ClearToListener());
//set up the exit button and add action listener
btnExit = new JButton("Exit");
btnExit.addActionListener (new ExitToListener());
//add components to the pane
add (tonsLabel);
add (tonsField);
add (stonesLabel);
add (stonesField);
add (poundsLabel);
add (poundsField);
add (ouncesLabel);
add (ouncesField);
add (resultLabel);
add (btnConvert);
add (btnClear);
add (btnExit);
//set default values for textFields
tonsField.setText("0");
stonesField.setText("0");
poundsField.setText("0");
ouncesField.setText("0");
//set up the look of the pane
setBackground(Color.white);
setPreferredSize(new Dimension(200, 280));
}
/**********************************************************************\
|
|the ConvertToListener class is dedicated to the convert button
|on the Convert To Ounces Pane
|
\**********************************************************************/
private class ConvertToListener implements ActionListener{
public void actionPerformed(ActionEvent event){
//set up variables for the ConvertListener class
int tons = 0, stones = 0, pounds = 0, ounces = 0, totalOunces = 0;
final int CONVERT_TONS = 32000, CONVERT_STONES = 224, CONVERT_POUNDS = 16;
String errorMessage = "You must enter a number.";
boolean testField;
//collect, test, and parse integers from each textField
//test tonsField
testField = testInt(tonsField.getText());
if (testField == true)
tons = Integer.parseInt(tonsField.getText());
else
JOptionPane.showMessageDialog(null, errorMessage);
//test stonesField
testField = testInt(stonesField.getText());
if (testField == true)
stones = Integer.parseInt(stonesField.getText());
else
JOptionPane.showMessageDialog(null, errorMessage);
//test poundsField
testField = testInt(poundsField.getText());
if (testField == true)
pounds = Integer.parseInt(poundsField.getText());
else
JOptionPane.showMessageDialog(null, errorMessage);
//test ouncesField
testField = testInt(ouncesField.getText());
if (testField == true)
ounces = Integer.parseInt(ouncesField.getText());
else
JOptionPane.showMessageDialog(null, errorMessage);
//perform the conversion calculation
totalOunces = tons * CONVERT_TONS + stones * CONVERT_STONES + pounds * CONVERT_POUNDS + ounces;
//display the result
resultLabel.setText(resultString + totalOunces);
}
//set up a try-catch in the event a letter is entered into a field
boolean testInt(String test){
try{
Integer.parseInt(test);
}
catch(NumberFormatException exception){
return false;
}
return true;
}
}
/***************************************************************************\
|
|the ClearToListener class is dedicated to the Clear button on
|the Convert To Ounces Pane
|
\***************************************************************************/
private class ClearToListener implements ActionListener{
/****************************************************************\
|
|this method will restore the default zeros to all text fields
|
\****************************************************************/
public void actionPerformed(ActionEvent event){
//restore default values to textFields
tonsField.setText("0");
stonesField.setText("0");
poundsField.setText("0");
ouncesField.setText("0");
}
}
/*******************************************************************************\
|
|the ExitToListener class is dedicated to the Exit button on the
|Convert To Ounces Pane
|
\*******************************************************************************/
private class ExitToListener implements ActionListener{
/***********************************************************\
|
|this method will end the program when the user
|clicks the exit button
|
\***********************************************************/
public void actionPerformed(ActionEvent event){
System.exit(0);
}
}
}
}
Comment