title: Java using variable created in action listener
body: <p>I am having issues with some java code. I cannot figure out how to solve it. Please note that the code is heavily simplifed.</p>
  
  <p>In panelQuestion, I am creating a GUI with a button and two combo boxes. I add an action listener to the button. </p>
  
  <p>When this button is clicked, a string with the values of the combo boxes is created, called objectName.</p>
  
  <p>After having initialized the GUI, I create objects.</p>
  
  <p>The issue is that I would like to be able to use the objectName in the main class so that I can check for some of its attributes.</p>
  
  <p>For example, if the user was to choose Leicester and York, the string would be created (leicester_york), and that string would be used to check for that objects attributes. </p>
  
  <p>However this does not work. I am told that objectName does not exist. Any help would be appreciated, thanks.</p>
  
  <p>panelQuestion:</p>
  
  <pre><code>    import java.awt.*;
  import java.awt.image.*;
  import javax.swing.*;
  import javax.swing.border.*;
  import java.awt.event.*;
  
  public class ThreePanelLayout {
  
      private JComponent ui = null;
      private CardLayout cardLayout = new CardLayout();  
      String objectName;
  
      ThreePanelLayout() {
          initUI();
      }
  
      public void initUI() {
          if (ui!=null) return;
  
          ui = new JPanel(new BorderLayout(4,4));
          ui.setBorder(new EmptyBorder(4,4,4,4));
  
          //create the 3 panels of the '3 panel layout'. 
          JPanel panel1 = new JPanel(new BorderLayout());//();
          panel1.setBackground(Color.RED);
          panel1.setBorder(new TitledBorder("Choose Option"));
  
          JPanel panel2 = new JPanel(new BorderLayout());
          panel2.setBackground(Color.GREEN);
          panel2.setBorder(new TitledBorder("Choose Two Stops"));
  
          JPanel panel3 = new JPanel();
          panel3.setBackground(Color.ORANGE);
          panel3.setBorder(new TitledBorder("Click an Option"));
          panel3.setLayout(cardLayout);
  
  
          // add the buttons to 1st panel
          JButton timeButton, priceButton, routeButton, adminButton, exitButton, inputRoute, saveRoute, retrieveRoute, backToMain; //DECLARING BUTTON
          timeButton    = new JButton("Time");
          priceButton   = new JButton("Price");
          routeButton   = new JButton("Route");
          adminButton   = new JButton("Admin");
          exitButton    = new JButton("Exit");  
          inputRoute    = new JButton("Input Route");
          saveRoute     = new JButton("Save Route");
          retrieveRoute = new JButton("Retrieve route");
  
          JPanel panelButtons = new JPanel(new GridLayout(5,1,5,5));
          panelButtons.add(timeButton);
          panelButtons.add(priceButton);
          panelButtons.add(routeButton);
          panelButtons.add(adminButton);
          panelButtons.add(exitButton);        
          panel1.add(panelButtons, BorderLayout.LINE_START);
  
          JPanel panelAdmin = new JPanel(new GridLayout(5,1));
          JPanel panelAdminSize = new JPanel();
          panelAdminSize.add(inputRoute);
          panelAdminSize.add(saveRoute);
          panelAdminSize.add(retrieveRoute);
          panelAdmin.add(panelAdminSize);  
  
  
          // adding the combos to the top of 2nd panel 
  
          String stops[] = {"Leicester","Loughborough","Nottingham","Derby","York"};
  
          JComboBox departingStop = new JComboBox();
          JComboBox finalStop = new JComboBox();
          for(int i = 0; i &lt; stops.length; i++) {
              departingStop.addItem(stops[i]);
              finalStop.addItem(stops[i]);
          }
  
          JPanel panelCombo = new JPanel(new FlowLayout());
          panelCombo.add(departingStop);
          panelCombo.add(finalStop);
          panel2.add(panelCombo, BorderLayout.PAGE_START);
  
          // adding options to panel 3        
          // panel for when time is clicked
          JPanel panelTime = new JPanel (); //creating panel for time option
          JLabel timeLabel = new JLabel("The time between x and y is"); 
          panelTime.add(timeLabel);
  
          //panel for when price is clicked
          JPanel panelPrice = new JPanel ();
          JButton confirmPrice = new JButton("Confirm");
          JRadioButton singleRadio = new JRadioButton("Single"); 
          JRadioButton returnRadio = new JRadioButton("Return");
          ButtonGroup group = new ButtonGroup();
          group.add(singleRadio);
          group.add(returnRadio);
          panelPrice.add(singleRadio);
          panelPrice.add(returnRadio);   
          panelPrice.add(confirmPrice);
  
          // used for route button
          JPanel panelRoute = new JPanel();
          JLabel routeLabel = new JLabel ("Stop between X and Y");
          panelRoute.add(routeLabel);
          JButton sortButton = new JButton("Sort");
          panelRoute.add(sortButton);
  
          panel3.add(panelTime,"1");
          panel3.add(panelPrice,"2");
          panel3.add(panelRoute,"3");
          panel3.add(panelAdmin,"4");
  
          timeButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent arg0) {
                  cardLayout.show(panel3, "1");
  
                  Object comboValue  = departingStop.getSelectedItem();
                  Object combo2Value = finalStop.getSelectedItem();
                  objectName = comboValue + "_" + combo2Value;
                  objectName = objectName.toLowerCase();
             }
          });
  
          priceButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent arg0) {
                  cardLayout.show(panel3, "2");
              }
          });
  
          routeButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent arg0) {
                  cardLayout.show(panel3, "3");
              }
          });
  
          adminButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent arg0) {
                  cardLayout.show(panel3, "4");
              }
          });
  
          exitButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent arg0) {
                  System.exit(0);
              }
          });   
  
          // assembling panels
          panel2.add(panel3);
          panel1.add(panel2, BorderLayout.CENTER);
          ui.add(panel1);
      }
  
      public JComponent getUI() {
          return ui;
      }
  
      public static void main(String[] args) {        
          Runnable r = new Runnable() {
              @Override
              public void run() {
                  try {
                      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                  } catch (Exception useDefault) {
                  }
                  ThreePanelLayout o = new ThreePanelLayout();
                  JFrame f = new JFrame(o.getClass().getSimpleName());
                  f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                  f.setLocationByPlatform(true);
                  f.setContentPane(o.getUI());
                  f.setSize(600,400);
                  f.setVisible(true);
              }
          };
          SwingUtilities.invokeLater(r);
  
          Journey leicester_loughborough = new Journey();
          leicester_loughborough.setSingleCost(2.5);
  
          Journey leicester_nottingham = new Journey();
          leicester_nottingham.setSingleCost(3.5);
  
          Journey leicester_derby = new Journey();
          leicester_derby.setSingleCost(3.7);
  
          Journey leicester_york = new Journey();
          leicester_york.setSingleCost(23.5);
  
          objectName.getSingleCost(); //error comes up here
  
      }
  
  
  }
  </code></pre>
  
  <p>Journey:</p>
  
  <pre><code>public class Journey
  {
  
      public double singleCost;
  
      public void setSingleCost(double cost) {
          singleCost = cost;
      }
  
      public double getSingleCost() {
          return singleCost;
      }
  }
  </code></pre>
  
  <p>I don't think this question is a duplicate. When using the solution objectName = this.objectName, the same issue arises. </p>