I’m setting up a GUI where I need to take information inputted from form elements and manipulate the information. This requires me to use some elements to access others.
For example, I have an input box (JTextField) and a button (JButton) beside it. When the button is pressed, I need to be able to manipulate the text entered into the input box. Everything I’ve tried to do so far to get this done has failed.
This is what my code looks like right now (I’ve embedded my questions in the comments):
public class MyClass
{
public static void main(String args[])
{
// Form elements are in here
JTextField myTextField = new JTextField(10);
JButton myTextFieldSubmit = new JButton("Submit");
myTextFieldSubmit.addActionListener(new ListenerClass());
}
}
class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// This is what happens when these elements are used
// I need to be able to access the form elements from MyClass in here, but this doesn't seem possible with my current setup
// For example, when the Submit button is pressed, I need to be able to myTextField.getText() and edit MyClass members
// How should my setup be changed to accommodate these needs?
}
}
Thanks for any help!
This is very much a variable scope issue.
Currently, the text field and button are in the scope of the
mainmethod, so having a separate class for theActionListenerwill mean that it will not have access to those variables.There are a few ways to achieve this:
(1) Make an inner class
ListenerClassinMyClass, and turn themyTextFieldandmyTextFieldSubmitinto instance fields ofMyClass.(2) Make an anonymous inner class in the
mainmethod, and this will allowmyTextFieldandmyTextFieldSubmitto remain in the same place, as long as they are declaredfinal.(3) Make a local class that is local to the
mainmethod. Again, this will require the text field and button to be declaredfinalto allow access from the inner class.(4) Handing an reference to the
ListenerClass, for example in the constructor, and also makingmyTextFieldandmyTextFieldSubmitan instance variable.(5) Make
myTextFieldandmyTextFieldSubmitintostaticfields, and allow direct access from theListerClass.There still probably are more ways to achieve this, and there may be better ways to implement this. The choice of which approach you take really depends up on the desired design of the application.