Search code examples
javaswinguser-interfaceactionlistenerjtextfield

Java's TextField unable to resolve, can't be seen


I've been trying to work on a class project, in which I have to set up a GUI oriented conversion program, and I"m trying to pass data from a method of my class to the ActionListener, but the Listener is telling me that the text field doesn't exist. It's within the same package and class, I've even tried extending it like a super class, but to no avail.

    package convertionProg;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;    
    import javax.swing.*;

    public class feetToMeter extends JFrame{

    JTextField ftomTextField = new JTextField(10);

    public static void Ftom(int d)
    {
        JFrame ftomWindow = new JFrame();
        ftomWindow.setTitle("Conversion Program: Feet to Meters");
        ftomWindow.setSize(200, 125);
        ftomWindow.setVisible(true);
        ftomWindow.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);          
        JPanel ftomPanel = new JPanel();
        ftomWindow.add(ftomPanel);          
        JLabel ftomLabel = new JLabel("Enter a distance in meters: ");
        JButton convert = new JButton("Convert");           
        ftomPanel.add(ftomLabel);
        ftomPanel.add(convert);
        ftomPanel.add(ftomTextField);           
        convert.addActionListener(new convertListener());
    }

    private static class convertListener implements ActionListener 
    {   
            public void actionPerformed(ActionEvent e)
            {
                final double CONVERSION = 0.3048;
                String input;   //Store input
                double meters;  //Stores meter output                   
                input = ftomTextField.getText();
                meters = Double.parseDouble(input);
                JOptionPane.showMessageDialog(null, "Distance in Meters is" + meters + "m");
            }
    }
}

Solution

  • You need to consider the scope of variable. At actionPerformed method ftomTextField is not visible. Declare ftomTextField as globally.

      public class feetToMeter extends JFrame{
    
        static JTextField ftomTextField = new JTextField(10);// Declare here.
    
        public static void Ftom(int d){
          ..............
        }
       }