0

I have created a button and when I click it I want to open another frame. The button was working before but now it won't open the frame.

First program:

// By: Qamar, Dimitri and Ehsan 
// Date: 21/12/2017
// Description: This is the front page of the Address Book

import javax.swing.*;
import java.awt.event.*;
import java.awt. *;
import java.io.*;


   public class AddressBook implements ActionListener     // Create a new class Address Book
{
    JFrame Start=new JFrame("Address Book");   // Set name of Frame
    JButton Open;   // Create a new button Open
 {
      Open=new JButton("OPEN");  // set name of button
      Start.setSize(500,600);   // set size of frame  
      Start.add(new JLabel(new ImageIcon("backgroundforlab.jpg")));   // add background picture
      Start.setVisible(true);  // make the frame visible 
      Start.setLayout(null);
      Start.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);  
      Start.getContentPane().add(Open);  //add button to frame
      Open.setBounds(100,385,295,88);   // set size of button
      Open.addActionListener(this);

 }

   public void actionPerformed(ActionEvent e)
{
      Start.dispose();  // When button is clicked close frame and open book222
      Book c=new Book();
}

   public static void main(String ag[])
  {
      AddressBook A=new AddressBook();          // Run AddressBook
  }


}

Now, the frame I want to open:

import javax.swing.*;
import java.awt.event.*;
import java.awt. *;
import java.io.*;
import java.io.FileWriter;           // Importing all necessary packages/extensions 
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

// Created By: Qamar Irfan, Dimitri Kolechi and Ehsan Saleh
// Date: 21/12/2017
// Description: This is the main program of Address Book. You can Create, Delete, Save and import contacts to this book. 

 public class Book {
 public static void main(String[] args){


   // Making the layout of the frame and adding all buttons and labels

    JFrame Start=new JFrame("Creating Contacts");     // Create frame
    JTable table = new JTable();      // Create Table

    FileWriter read; // Ceate new fileWriter
    JButton Create;  
    JButton Quit;     // Create new buttons
    JButton Delete;
    JButton Save;
    JButton Import;
    JButton Help;

    JLabel name1 = new JLabel("Last Name");  
    JLabel name2= new JLabel ("First Name"); 
    JLabel phone= new JLabel ("Phone Number");    // Create Labels
    JLabel address= new JLabel ("Address");
    JLabel pcode= new JLabel ("Postal Code");
    JLabel eaddress= new JLabel ("Email Address");
    JLabel note= new JLabel ("Note");

    JTextField lastName = new JTextField();
    JTextField firstName= new JTextField();
    JTextField phoneNumber= new JTextField();
    JTextField addressLocation= new JTextField(); // Create Text Fields
    JTextField postalCode= new JTextField();
    JTextField emailAddress= new JTextField();
    JTextField noteMemo= new JTextField();
{
    Create=new JButton("Create Contact"); 
    Quit= new JButton ("Quit");    // set name of buttons
    Delete= new JButton ("Delete a Contact");
    Save= new JButton ("Save Contacts");
    Import= new JButton ("Import Saved Contacts");
    Help= new JButton ("Instructions");

    Start.setSize(1215,600);       // set size of frame
    Start.setVisible(true);  // make the frame visible 
    Start.setLayout(null);
    Start.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);  

    Start.getContentPane().add(Create); 
    Start.getContentPane().add(Quit);    // add all buttons to frame
    Start.getContentPane().add(Delete); 
    Start.getContentPane().add(Save);
    Start.getContentPane().add(Import);
    Start.getContentPane().add(Help);


    Start.getContentPane().add(name1);
    Start.getContentPane().add(name2);
    Start.getContentPane().add(phone);
    Start.getContentPane().add(address);    // add all Labels
    Start.getContentPane().add(pcode);
    Start.getContentPane().add(eaddress);
    Start.getContentPane().add(note);

    Start.getContentPane().add(lastName);
    Start.getContentPane().add(firstName);
    Start.getContentPane().add(phoneNumber);
    Start.getContentPane().add(addressLocation);  // add all Text Field
    Start.getContentPane().add(postalCode);
    Start.getContentPane().add(emailAddress);
    Start.getContentPane().add(noteMemo);                         

    Help.setBounds(820,150,200,30);
    Create.setBounds(700,20,200,30);  // set size of buttons
    Delete.setBounds(700,90,200,30);  
    Save.setBounds(950,90,200,30);
    Import.setBounds(950,20,200,30);
    Quit.setBounds(820,200,200,30);

    name1.setBounds(40,11,100,100);  
    name2.setBounds(250,11,100,100);
    phone.setBounds(460,11,100,100);     // set location of all Labels
    address.setBounds(40,75,100,100);
    pcode.setBounds(250,75,100,100);
    eaddress.setBounds(460,75,100,100);
    note.setBounds(160,150,100,100);

    lastName.setBounds(105,50,100,25);
    firstName.setBounds(320,50,100,25); 
    phoneNumber.setBounds(550,50,100,25); 
    addressLocation.setBounds(105,114,100,25);  // set location of all Text Fields 
    postalCode.setBounds(320,114,100,25); 
    emailAddress.setBounds(550,114,100,25); 
    noteMemo.setBounds(200,180,300,50);   

    // Creating The Table

    Object[] columns = {"Last Name","First Name","Phone Number","Address","Postal Code","Email Address","Note"};
    DefaultTableModel model = new DefaultTableModel();
    model.setColumnIdentifiers(columns);                       // making the table 
    table.setModel(model);

    table.setBackground(Color.LIGHT_GRAY);
    table.setForeground(Color.black);
    Font font = new Font("",4,12);          // setting the table up
    table.setFont(font);
    table.setRowHeight(30);

    JScrollPane pane = new JScrollPane(table);
    pane.setBounds(0, 275, 1200, 700);            // setting size and location of table
    Start.setLayout(null);                   // adding table to frame
    Start.add(pane);
    Object[] row = new Object[7];


    // Setting the functions of all buttons 

    Quit.addActionListener(new ActionListener(){

      @Override                                       // setting the quit buttons function
      public void actionPerformed(ActionEvent e) {

        System.exit(0);     // When Quit is clicked close frame
        }
     }); 

     Help.addActionListener(new ActionListener(){

      @Override                                       // setting the Help buttons function
      public void actionPerformed(ActionEvent e) {

      JOptionPane.showMessageDialog(null, "Type the credentials in the fields, make sure to add '/' at end of every field. after typing, click create, make sure everytime create a contact to save it. once saved delete contact and then save another contact.","Instructions", JOptionPane.INFORMATION_MESSAGE); 

                 // When Help is clicked open pop up box with instructions 
        }
     }); 


    Delete.addActionListener(new ActionListener(){

      @Override
      public void actionPerformed(ActionEvent e) {

        int i = table.getSelectedRow();            // setting the delete buttons function
           if(i >= 0){

                  model.removeRow(i);            // delete the selected row
                  }
           else{
                  System.out.println("Please select a Contact");   // If no row is selected than nothing will be deleted
                  }
            }
        });

     Create.addActionListener(new ActionListener(){

      @Override                                      // setting the create buttons function
      public void actionPerformed(ActionEvent e) { 

        row[0] = lastName.getText();
        row[1] = firstName.getText();
        row[2] = phoneNumber.getText();           // when create is presses get
        row[3] = addressLocation.getText();       // the data from the textfields 
        row[4] = postalCode.getText();
        row[5] = emailAddress.getText();
        row[6] = noteMemo.getText();
                 model.addRow(row);
           }
        });

    Save.addActionListener(new ActionListener(){

      @Override                                   // setting the Save button function 
      public void actionPerformed(ActionEvent e){


       try{

         File file = new File("records.txt");
                                                      // if the file records.txt does not exist
                                                      // then the program will create one itself
               if(!file.exists()){
                   file.createNewFile();
               }

               FileWriter read = new FileWriter("records.txt", true);  // create new FileWriter
               BufferedWriter write1 = new BufferedWriter(read);          // create new BufferedWriter


               for(int i = 0; i < table.getRowCount(); i++){            // get the amount of rows in JTable

                   for(int j = 0; j < table.getColumnCount(); j++){
                       write1.write(table.getModel().getValueAt(i, j)+" ");  // write all data from table in records.txt
                   }

                   write1.write("\r\n");    // add space between every contact
               }

               write1.close();  
               read.close();

               JOptionPane.showMessageDialog(null, "All Contacts Saved");   // when contacts successfully transferred show pop up box

               }catch(Exception ex){
                   ex.printStackTrace();
               }
           }
        });
    Import.addActionListener(new ActionListener(){

      @Override                                   // setting the Import button function 
      public void actionPerformed(ActionEvent e){


       try {
            BufferedReader write2 = new BufferedReader(new FileReader("records.txt"));   // find the file records.txt

            Object[] tableLines = write2.lines().toArray(); 

            for(int i = 0; i < tableLines.length; i++)    // add contacts to JTable
            {
                String line = tableLines[i].toString().trim();
                String[] dataRow = line.split("/");     // every space means new column
                model.addRow(dataRow);
            }


        } catch (Exception ex) {

        }
    } 

        });



   }
  }
 }
Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
  • `Book` is not a frame. You don't even try to call `setVisible()` on it. – markspace Jan 22 '18 at 05:21
  • First of all, your `Book` class is not extending a `JFrame`. So when you create an object from it (in your other classes) it won't create a frame which can be shown. Another tip is when you create an object from a class, the main method of that class is not being called. You wrote a lot of code in the main method of your `Book` class but by creating an instance of it, those code won't get called. Read more about JFrames: https://docs.oracle.com/javase/tutorial/uiswing/components/frame.html and https://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-or-bad-practice – STaefi Jan 22 '18 at 05:56
  • I would recommend to reuse same frame that already opened. Invoking setVisible(false) or dispose() and creating new frame slow down. To reuse current frame just call frame.getContentPane().removeAll() and add new controls on same. – Dharmraj Jan 22 '18 at 06:30

2 Answers2

1

Correct your book class make Book to extend JFrame and then reorganise your code as below.

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
// Importing all necessary packages/extensions 

// Created By: Qamar Irfan, Dimitri Kolechi and Ehsan Saleh
// Date: 21/12/2017
// Description: This is the main program of Address Book. You can Create, Delete, Save and import contacts to this book. 

public class Book extends JFrame {

    // Making the layout of the frame and adding all buttons and labels

    JTable table = new JTable(); // Create Table

    DefaultTableModel model = new DefaultTableModel();
    JTextField lastName = new JTextField();
    JTextField firstName = new JTextField();
    JTextField phoneNumber = new JTextField();
    JTextField addressLocation = new JTextField(); // Create Text Fields
    JTextField postalCode = new JTextField();
    JTextField emailAddress = new JTextField();
    JTextField noteMemo = new JTextField();
    Object[] row = new Object[7];

    public Book() {
        super("Creating Contacts"); // Create frame
        init();
    }

    public void init() {

        JLabel name1 = new JLabel("Last Name");
        JLabel name2 = new JLabel("First Name");
        JLabel phone = new JLabel("Phone Number"); // Create Labels
        JLabel address = new JLabel("Address");
        JLabel pcode = new JLabel("Postal Code");
        JLabel eaddress = new JLabel("Email Address");
        JLabel note = new JLabel("Note");

        JButton Create = new JButton("Create Contact");
        JButton Quit = new JButton("Quit"); // set name of buttons
        JButton Delete = new JButton("Delete a Contact");
        JButton Save = new JButton("Save Contacts");
        JButton Import = new JButton("Import Saved Contacts");
        JButton Help = new JButton("Instructions");

        setSize(1215, 600); // set size of frame
        setVisible(true); // make the frame visible
        setLayout(null);
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

        getContentPane().add(Create);
        getContentPane().add(Quit); // add all buttons to frame
        getContentPane().add(Delete);
        getContentPane().add(Save);
        getContentPane().add(Import);
        getContentPane().add(Help);

        getContentPane().add(name1);
        getContentPane().add(name2);
        getContentPane().add(phone);
        getContentPane().add(address); // add all Labels
        getContentPane().add(pcode);
        getContentPane().add(eaddress);
        getContentPane().add(note);

        getContentPane().add(lastName);
        getContentPane().add(firstName);
        getContentPane().add(phoneNumber);
        getContentPane().add(addressLocation); // add all Text Field
        getContentPane().add(postalCode);
        getContentPane().add(emailAddress);
        getContentPane().add(noteMemo);

        Help.setBounds(820, 150, 200, 30);
        Create.setBounds(700, 20, 200, 30); // set size of buttons
        Delete.setBounds(700, 90, 200, 30);
        Save.setBounds(950, 90, 200, 30);
        Import.setBounds(950, 20, 200, 30);
        Quit.setBounds(820, 200, 200, 30);

        name1.setBounds(40, 11, 100, 100);
        name2.setBounds(250, 11, 100, 100);
        phone.setBounds(460, 11, 100, 100); // set location of all Labels
        address.setBounds(40, 75, 100, 100);
        pcode.setBounds(250, 75, 100, 100);
        eaddress.setBounds(460, 75, 100, 100);
        note.setBounds(160, 150, 100, 100);

        lastName.setBounds(105, 50, 100, 25);
        firstName.setBounds(320, 50, 100, 25);
        phoneNumber.setBounds(550, 50, 100, 25);
        addressLocation.setBounds(105, 114, 100, 25); // set location of all
                                                        // Text Fields
        postalCode.setBounds(320, 114, 100, 25);
        emailAddress.setBounds(550, 114, 100, 25);
        noteMemo.setBounds(200, 180, 300, 50);

        // Creating The Table

        Object[] columns = { "Last Name", "First Name", "Phone Number",
                "Address", "Postal Code", "Email Address", "Note" };
        model.setColumnIdentifiers(columns); // making the table
        table.setModel(model);

        table.setBackground(Color.LIGHT_GRAY);
        table.setForeground(Color.black);
        Font font = new Font("", 4, 12); // setting the table up
        table.setFont(font);
        table.setRowHeight(30);

        JScrollPane pane = new JScrollPane(table);
        pane.setBounds(0, 275, 1200, 700); // setting size and location of
                                            // table
        setLayout(null); // adding table to frame
        add(pane);

        // Setting the functions of all buttons

        Quit.addActionListener(new ActionListener() {

            @Override
            // setting the quit buttons function
            public void actionPerformed(ActionEvent e) {

                System.exit(0); // When Quit is clicked close frame
            }
        });

        Help.addActionListener(new ActionListener() {

            @Override
            // setting the Help buttons function
            public void actionPerformed(ActionEvent e) {

                JOptionPane
                        .showMessageDialog(
                                null,
                                "Type the credentials in the fields, make sure to add '/' at end of every field. after typing, click create, make sure everytime create a contact to save it. once saved delete contact and then save another contact.",
                                "Instructions", JOptionPane.INFORMATION_MESSAGE);

                // When Help is clicked open pop up box with instructions
            }
        });

        Delete.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                int i = table.getSelectedRow(); // setting the delete
                                                // buttons function
                if (i >= 0) {

                    model.removeRow(i); // delete the selected row
                } else {
                    System.out.println("Please select a Contact"); // If no
                                                                    // row
                                                                    // is
                                                                    // selected
                                                                    // than
                                                                    // nothing
                                                                    // will
                                                                    // be
                                                                    // deleted
                }
            }
        });

        Create.addActionListener(new ActionListener() {

            @Override
            // setting the create buttons function
            public void actionPerformed(ActionEvent e) {

                row[0] = lastName.getText();
                row[1] = firstName.getText();
                row[2] = phoneNumber.getText(); // when create is presses
                                                // get
                row[3] = addressLocation.getText(); // the data from the
                                                    // textfields
                row[4] = postalCode.getText();
                row[5] = emailAddress.getText();
                row[6] = noteMemo.getText();
                model.addRow(row);
            }
        });

        Save.addActionListener(new ActionListener() {

            @Override
            // setting the Save button function
            public void actionPerformed(ActionEvent e) {

                try {

                    File file = new File("records.txt");
                    // if the file records.txt does not exist
                    // then the program will create one itself
                    if (!file.exists()) {
                        file.createNewFile();
                    }

                    FileWriter read = new FileWriter("records.txt", true); // create
                                                                            // new
                                                                            // FileWriter
                    BufferedWriter write1 = new BufferedWriter(read); // create
                                                                        // new
                                                                        // BufferedWriter

                    for (int i = 0; i < table.getRowCount(); i++) { // get
                                                                    // the
                                                                    // amount
                                                                    // of
                                                                    // rows
                                                                    // in
                                                                    // JTable

                        for (int j = 0; j < table.getColumnCount(); j++) {
                            write1.write(table.getModel().getValueAt(i, j)
                                    + " "); // write all data from table in
                                            // records.txt
                        }

                        write1.write("\r\n"); // add space between every
                                                // contact
                    }

                    write1.close();
                    read.close();

                    JOptionPane.showMessageDialog(null, "All Contacts Saved"); // when
                                                                                // contacts
                                                                                // successfully
                                                                                // transferred
                                                                                // show
                                                                                // pop
                                                                                // up
                                                                                // box

                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
        Import.addActionListener(new ActionListener() {

            @Override
            // setting the Import button function
            public void actionPerformed(ActionEvent e) {
                try {
                    BufferedReader write2 = new BufferedReader(new FileReader(
                            "records.txt")); // find the file // records.txt

                    Object[] tableLines = write2.lines().toArray();

                    for (int i = 0; i < tableLines.length; i++) // add //
                                                                // contacts //
                                                                // to JTable
                    {
                        String line = tableLines[i].toString().trim();
                        String[] dataRow = line.split("/"); // every space //
                                                            // means new //
                                                            // column
                        model.addRow(dataRow);
                    }

                } catch (Exception ex) {

                }
            }

        });

    }
}
// END OF PROGRAM
0

Write after Book c = new Book();

c.setVisible(true);
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103