title: Open new JFrame with JButton Click - Java Swing
body: <p>I am trying to open a new JFrame window with a button click event.  There is lots of info on this site but nothing that helps me because I think it is not so much the code I have, but the order it is executed (however I am uncertain).</p>
  
  <p>This is the code for the frame holding the button that I want to initiate the event:</p>
  
  <pre><code>package messing with swing;
  
  import javax.swing.*;
  import java.awt.*;
  import java.awt.event.*;
  import java.io.*;
  import java.util.*;
  import javax.swing.border.EmptyBorder;
  
  
  public class ReportGUI extends JFrame{
      //Fields
      private JButton viewAllReports = new JButton("View All Program Details");
      private JButton viewPrograms = new JButton("View Programs and Majors Associated with this course"); 
      private JButton viewTaughtCourses = new JButton("View Courses this Examiner Teaches"); 
      private JLabel courseLabel = new JLabel("Select a Course: ");
      private JLabel examinerLabel = new JLabel("Select an Examiner: "); 
      private JPanel panel = new JPanel(new GridLayout(6,2,4,4));  
      private ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;(); 
      private ArrayList&lt;String&gt; courseList = new ArrayList&lt;String&gt;();  
  
  
       public ReportGUI(){   
             reportInterface();
             allReportsBtn();     
             examinnerFileRead();
             courseFileRead();
             comboBoxes();
       }        
  
       private void examinnerFileRead(){
           try{
               Scanner scan = new Scanner(new File("Examiner.txt"));
  
               while(scan.hasNextLine()){
                   list.add(scan.nextLine());
               }
               scan.close();
           }
           catch (FileNotFoundException e){
               e.printStackTrace();
           }
       }
        private void courseFileRead(){
           try{
               Scanner scan = new Scanner(new File("Course.txt"));
  
               while(scan.hasNextLine()){
                   courseList.add(scan.nextLine());
               }
               scan.close();
           }
           catch (FileNotFoundException e){
               e.printStackTrace();
           }
       }
  
      private void reportInterface(){         
            setTitle("Choose Report Specifications");                   
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            JPanel panel = new JPanel(new FlowLayout());        
            add(panel, BorderLayout.CENTER);
            setSize(650,200);
            setVisible(true);    
            setResizable(false);
            setLocationRelativeTo(null);
  }    
      private void allReportsBtn(){
          JPanel panel = new JPanel(new GridLayout(1,1)); 
          panel.setBorder(new EmptyBorder(70, 50, 70, 25));
          panel.add(viewAllReports);        
          viewAllReports.addActionListener(new ActionListener(){
              @Override
              public void actionPerformed(ActionEvent e){
                  JFrame AllDataGUI = new JFrame();
                  new AllDataGUI();
              }
          });         
          add(panel, BorderLayout.LINE_END);
      }       
      private void comboBoxes(){                
          panel.setBorder(new EmptyBorder(0, 5, 5, 10));
          String[] comboBox1Array = list.toArray(new String[list.size()]);
          JComboBox comboBox1 = new JComboBox(comboBox1Array);          
          panel.add(examinerLabel);
          panel.add(comboBox1);          
          panel.add(viewTaughtCourses);
           viewTaughtCourses.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {                 
                  JFrame ViewCourseGUI = new JFrame();
                  new ViewCourseGUI();
              }
          });  
           String[] comboBox2Array = courseList.toArray(new String[courseList.size()]);
           JComboBox comboBox2 = new JComboBox(comboBox2Array);
           panel.add(courseLabel);         
           panel.add(comboBox2); 
           panel.add(viewPrograms);
           add(panel, BorderLayout.LINE_START); 
  
      } 
  </code></pre>
  
  <p>If you don't want to delve into the above code, the button ActionListener is here:</p>
  
  <pre><code> panel.add(viewTaughtCourses);
               viewTaughtCourses.addActionListener(new ActionListener() {
                  @Override
                  public void actionPerformed(ActionEvent e) {                 
                      JFrame ViewCourseGUI = new JFrame();
                      new ViewCourseGUI();
                  }
              });  
  </code></pre>
  
  <p>This is the code in the class holding the JFrame I want to open:</p>
  
  <pre><code>package messing with swing;
  
  import java.awt.BorderLayout;
  import java.awt.GridLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JTextArea;
  import javax.swing.border.EmptyBorder;
  
  
  public class ViewCourseGUI extends JFrame{ 
      private JButton saveCloseBtn = new JButton("Save Changes and Close");
      private JButton closeButton = new JButton("Exit Without Saving");
      private JFrame frame=new JFrame("Courses taught by this examiner");
      private JTextArea textArea = new JTextArea();
  
  
  
       public void ViewCoursesGUI(){
           panels();
       }        
  
      private void panels(){        
            JPanel panel = new JPanel(new GridLayout(1,1));
            panel.setBorder(new EmptyBorder(5, 5, 5, 5));
            JPanel rightPanel = new JPanel(new GridLayout(15,0,10,10));
            rightPanel.setBorder(new EmptyBorder(15, 5, 5, 10));
            JScrollPane scrollBarForTextArea=new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            panel.add(scrollBarForTextArea); 
            frame.add(panel);
            frame.getContentPane().add(rightPanel,BorderLayout.EAST);
            rightPanel.add(saveCloseBtn);
            rightPanel.add(closeButton);
  
             frame.setSize(1000, 700);
             frame.setVisible(true);   
             frame.setLocationRelativeTo(null);
  
  }
  }
  </code></pre>
  
  <p>Could someone please point me in the right direction?</p>