Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: Java
I have developed a JApplet program that loads dvds into array and displays them in a textarea in a sorted format. i have created a class called dvd that loads all the content to array dvd. my class uses implements comparable to sort.
my problem is i cant insert/add into the array and still sort the element in the array
i want to know how do i insert into the array dvdz and still sort the newly inserted element without affecting the sequence.
 
here's my program code:
 
//////////////////////////////////////////////////////////////////
 
//
// created by NS KHUMALO
//  20702589
//
//
//

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Collections;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.ListIterator;

 
public class dvdMain extends JFrame implements ActionListener, ItemListener
{
    private JLabel lblDvdSystemBanner, lblSelectOptions,lblMovieTitle,lblYearOfRelease,lblAgeClassification,lblMovieGenre,lblMovieTime,lblPrice;
    private TextField txtMovieTitle, txtYearOfRelease, txtAgeClassification, txtMovieGenre,txtMovieTime, txtPrice;
    private JButton btnBack, btnBack2, btnAdd;
    private JTextArea txaDisplay;
    private JPanel mainPanel,disPanel,dPanel,rdbPanel,addPanel,txtAreaPanel;
    private JRadioButton rdbLoad, rdbDisplay, rdbAdd, rdbSave, rdbLFile, rdbExit;
    private Font msgF = new Font("Algerian",Font.BOLD,23);

 
    private static int s = 0;

    private int width, height;

    PrintWriter outputStream;

    Container con = getContentPane();

    dvdClass[] dvds = new dvdClass[99];

         dvdClass dvd1 = new dvdClass("Jaws",1996,"PG 13","Thriller",89);
         dvdClass dvd2 = new dvdClass("Titanic",1997,"PG 13","Drama",90);
         dvdClass dvd3 = new dvdClass("Be cool",2008,"PG 13","comedy",89);
         dvdClass dvd4 = new dvdClass("Hitch",2005,"PG 13","Comedy",90);

 
         dvdClass[] dvdz = new dvdClass[] {dvd1, dvd2, dvd3,dvd4};

//  ArrayList<dvdClass> dvds = new ArrayList<dvdClass>();

    public static final int H = 400;
    public static final int W = 390;

    public static void main(String [] args)
    {
 

        dvdMain tb = new dvdMain();
        tb.setBounds(340,120,550,500);

        for(int i=0; i< 20; i++)
        System.out.println("loading...");
        tb.setSize(750,400);
        tb.setVisible(true);

 

    }
    public dvdMain()
    {
        setTitle("Dvd Records");
        setSize(450,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        dvdMain.setDefaultLookAndFeelDecorated(true);

        mainPanel = new JPanel();
        mainPanel.setLayout(new FlowLayout());

        disPanel = new JPanel();
        disPanel.setLayout(new GridLayout(2,1));

        dPanel = new JPanel();
        dPanel.setLayout(new GridLayout(2,1));

        lblDvdSystemBanner = new JLabel("DVD Booking System");
        lblDvdSystemBanner.setFont(msgF);
        lblSelectOptions = new JLabel("Please select one option from the list");

        dPanel.add(lblDvdSystemBanner);
        dPanel.add(lblSelectOptions);

        disPanel.add(dPanel);

        mainPanel.add(disPanel,"North");

        try
        {
 
            outputStream = new PrintWriter(new FileOutputStream("dvds.txt",true));

        }
        catch(FileNotFoundException e)
        {
            System.err.println("File not found");
            System.exit(1);
        }
 
        ButtonGroup rg = new ButtonGroup();

        rdbLoad = new JRadioButton("Load DVD's");
        rdbLoad.addItemListener(this);

 
        rdbDisplay = new JRadioButton("Display DVD's");
        rdbDisplay.addItemListener(this);
        rdbDisplay.setEnabled(false);

        rdbAdd = new JRadioButton("Add a DVD(s)");
        rdbAdd.addItemListener(this);
        rdbAdd.setEnabled(false);

        rdbSave = new JRadioButton("Save DVD(s)");
        rdbSave.addItemListener(this);
        rdbSave.setEnabled(false);

        rdbExit = new JRadioButton("Exit");
        rdbExit.addItemListener(this);

        rg = new ButtonGroup();
        rg.add(rdbLoad);
        rg.add(rdbDisplay);
        rg.add(rdbAdd);
        rg.add(rdbSave);
        rg.add(rdbExit);

        rdbPanel = new JPanel();
        rdbPanel.setLayout(new GridLayout(6,1));

        rdbPanel.add(rdbLoad);
        rdbPanel.add(rdbDisplay);
        rdbPanel.add(rdbAdd);
        rdbPanel.add(rdbSave);
        rdbPanel.add(rdbExit);

        disPanel.add(rdbPanel);

        lblMovieTitle = new JLabel("Enter movie title: ");
        lblYearOfRelease =new JLabel("Enter year of release: ");
        lblAgeClassification =new JLabel("Enter age classification: ");
        lblMovieGenre =new JLabel("Enter movie genre: ");
        lblMovieTime =new JLabel("Enter movie playing time in minutes: ");

        txtMovieTitle  = new TextField(20);
        txtYearOfRelease  = new TextField(20);
        txtAgeClassification  = new TextField(20);
        txtMovieGenre  = new TextField(20);
        txtMovieTime  = new TextField(20);

 
        addPanel = new JPanel();
        addPanel.setLayout(new GridLayout(7,2,10,15));

        addPanel.add(lblMovieTitle);
        addPanel.add(txtMovieTitle);
        addPanel.add(lblYearOfRelease);
        addPanel.add(txtYearOfRelease);
        addPanel.add(lblAgeClassification);
        addPanel.add(txtAgeClassification);
        addPanel.add(lblMovieGenre);
        addPanel.add(txtMovieGenre);
        addPanel.add(lblMovieTime);
        addPanel.add(txtMovieTime);

 
        btnBack = new JButton("Back");
        btnBack.addActionListener(this);

        btnAdd = new JButton("Add");
        btnAdd.addActionListener(this);

        btnBack2 = new JButton("Back");
        btnBack2.addActionListener(this);

        addPanel.add(btnBack);
        addPanel.add(btnAdd);

        txtAreaPanel = new JPanel();
        txtAreaPanel.setLayout(new BorderLayout());

        txaDisplay = new JTextArea(20,20);
        txaDisplay.setBackground(Color.WHITE);
        txtAreaPanel.add(txaDisplay,BorderLayout.NORTH);
        txtAreaPanel.add(btnBack2,BorderLayout.SOUTH);

        addPanel.setVisible(false);
        txtAreaPanel.setVisible(false);
        mainPanel.setVisible(true);

        mainPanel.add(txtAreaPanel);
        mainPanel.add(addPanel);

 
        setContentPane(mainPanel);
    }
    public void actionPerformed(ActionEvent e)
    {
        if(e.getActionCommand().equals("Back"))
            back();
        else if (e.getActionCommand().equals("Add"))
            addDvd(dvdz);
    }
 
    public void itemStateChanged(ItemEvent e)
    {
        Object source = e.getSource();
        int select = e.getStateChange();

        if (source == rdbLoad)
                load(dvds);
            else if(source == rdbDisplay)
                display(dvds);
            else if(source == rdbAdd)
                add(dvds);
            else if(source == rdbSave)
                save(dvds);
            else if(source == rdbExit)
                exit();
    }
 
    /* Clear any existing object that are in the array
     * Create four Book Oject
     * Place them in the array
     */
    public void load(dvdClass[] dvds)
    {
        rdbAdd.setEnabled(true);
        rdbSave.setEnabled(true);
        rdbDisplay.setEnabled(true);
        rdbLoad.setEnabled(false);

 
        disPanel.setVisible(true);
        txtAreaPanel.setVisible(false);
        addPanel.setVisible(false);

        clearArray();

        s = 3;
     /*
         dvdClass dvd1 = new dvdClass("Jaws",1996,"PG 13","Thriller",89);
         dvdClass dvd2 = new dvdClass("Titanic",1997,"PG 13","Drama",90);
         dvdClass dvd3 = new dvdClass("Be cool",2008,"PG 13","comedy",89);
         dvdClass dvd4 = new dvdClass("Hitch",2005,"PG 13","Comedy",90);
 
         dvds = new dvdClass[] {dvd1, dvd2, dvd3,dvd4};
         Arrays.sort(dvds);
 
         for (dvdClass dvd : dvds)
         //  txaDisplay.append("\n "+ dvd.toString());
         System.out.println("THis is**************"+ dvd.toString()+"\n");
 
         */
 
         //Arrays.sort(dvds);
         }
          /*    dvdClass dc = new dvdClass(titl,dat);
            movies.add(dc);
 
            movieT.setText("");
            yearR.setText("");
            time.setText("");
 

            Iterator itr = movies.iterator();
 
//       Collection.sort(dvds);
 
        //JOptionPane.showMessageDialog(null,"load");
 
    }
    /* Call add Panel
     */
    public void add(dvdClass[] dvds)
    {
        disPanel.setVisible(false);
        txtAreaPanel.setVisible(false);
        addPanel.setVisible(true);
    }
    /* Display all Book's in the array
     */
    public void display(dvdClass[] dvds)
    {
 
        addPanel.setVisible(false);
        disPanel.setVisible(false);
        txtAreaPanel.setVisible(true);

        txaDisplay.setText("");

        txaDisplay.append(" "+ "MOVIE TITLE"+"\t\t" + "YEAR OF RELEASE" +"\t" + "AGE CLASSIFICATION" + "\t" + "GENRE"+ "\t" + "PLAYING TIME\t\n");

 
         Arrays.sort(dvdz);

         for (dvdClass dvd : dvdz)
       txaDisplay.append("\n"+ dvd.toString());
      //   System.out.println( dvd.toString()+"\n");

        // display in the text area
        //for (dvdClass dvd : dvds)
    //  for(int i=0;i<=dvds.length;i++)
       // txaDisplay.append("\n "+ dvds[i].getMovieTitle() + "\t\t" + dvds[i].getMovieYearOfRelease()  + "\t\t" + dvds[i].getMovieAgeClassification() + "\t\t" + dvds[i].getMovieGenre() + "\t" + dvds[i].getMoviePlayingTime());
    /// System.out.println("\n "+ dvd.toString());

 

 

    }
 
 /* Save all Book's in the array
  * to the text file
  */
    public void save(dvdClass[] dvds)
    {
        addPanel.setVisible(false);
        disPanel.setVisible(true);
        txtAreaPanel.setVisible(false);

    //  rdbSave.setEnabled(false);
    //  rdbAdd.setEnabled(false);

 
        for(int i=0;i<dvdz.length;i++)
            outputStream.println(dvdz[i]);

 
        outputStream.close();

        JOptionPane.showMessageDialog(null,"All Book's object in the array,\n has been save to text file");

    }
 
    /* Closing the GUI
     * terminate application
     */
    public void exit()
    {
        addPanel.setVisible(false);
        disPanel.setVisible(false);
        txtAreaPanel.setVisible(false);
        System.exit(0);
    }
 
    /** Clear any existing object in the array
     *  Load Book object in the from file
     *  Place them in the arry
     */
 
    /* send you back to main Panel
     */
    public void back()
    {
            disPanel.setVisible(true);
            txtAreaPanel.setVisible(false);
            addPanel.setVisible(false);
    }
    /* Add a new Book Object
     * atthe end of the array
     */
    public void addDvd(dvdClass[] dvd5)
    {
        if(validateM())
        {
            String t, a, g;
            int y,ti;

 
            t = txtMovieTitle.getText();
            a = txtAgeClassification.getText();
            g = txtMovieGenre.getText();

            t = t.replace(" ","");
            g = g.replace(" ","");
            a = a.replace(" ","");

            ti = Integer.parseInt(txtMovieTime.getText());
            y = Integer.parseInt(txtYearOfRelease.getText());

 
            dvdz[4]= new dvdClass(t,y,a,g,ti);
        //  dvd5 = new dvdClass();

//          dvdz = new dvdClass[] {dvd1, dvd2, dvd3,dvd4,dvd5};

            s += 1;

            txtMovieTitle.setText("");
            txtYearOfRelease.setText("");
            txtAgeClassification.setText("");
            txtMovieGenre.setText("");
            txtMovieTime.setText("");

            JOptionPane.showMessageDialog(null,"ADD \n" + t + " " + y + " " + a + " " + g + " " + y +" "+ti+ "\n has been added in the end of the array");

        }
 

 

    }
 
    public int getArrayIndex(dvdClass[] dvds)
    {
        dvdClass s;

 
        int i=0;
        int count=0;

        String fileName = "Bks.txt";
        Scanner fromFile = null;

        try
        {
            fromFile = new Scanner(new File(fileName));

        }
        catch(FileNotFoundException e)
        {
            System.out.println("Error opening the file " + "fileName");
            System.exit(0);
        }
 
        while(fromFile.hasNext())
        {
 
            count++;
        }
            return i;
    }
 
    //Clear any existing objects in the array
    public void clearArray()
    {
 
        for(int i=0;i<dvds.length;i++)
            dvds[i] = null;
    }
    /* Valide text fields
     * if are empty or not
     * send back error message if are empty
     */
    public boolean validateM()
    {
        boolean bRet     = true;
        String strErrMsg = "";
        String strTitle = txtMovieTitle.getText();
        String strYear  = txtYearOfRelease.getText();
        String strAgeClass = txtAgeClassification.getText();
        String strGenre = txtMovieGenre.getText();
        String strTime  = txtMovieTime.getText();

 
        if(strTitle == null || strTitle.length() < 1 )
        {
            strErrMsg = "The movie title field connot be empty.";
            bRet   = false;
        }
        else if(strAgeClass == null || strAgeClass.length() < 1)
        {
            strErrMsg = "The age classification field connot be empty.";
            bRet   = false;
        }
        else if(strGenre == null || strGenre.length() < 1)
        {
            strErrMsg = "The genre field connot be empty.";
            bRet   = false;
        }
        else
        {
            try
            {
                int yearR = Integer.parseInt(strYear);

                try
                {
                    int mTime =Integer.parseInt(strTime);
                }
                catch(NumberFormatException ex)
                {
                        strErrMsg = "The time field only acceps digits";
                        bRet       = false;
                }
 
            }
            catch(NumberFormatException ex)
            {
                strErrMsg  = "The year field only accepts digits";
                bRet      = false;
            }
        }
 
        if(!bRet)
        JOptionPane.showMessageDialog(null,strErrMsg);

 

        return bRet;

 
    }
}
 
///////////////////////////// DVD CLASS //////
 
public class dvdClass implements Comparable
{
    private String movieTitle;
    private String movieAgeClassification;
    private String movieGenre;
    private int movieYearOfRelease;
    private int moviePlayingTime;
 

    public dvdClass()
    {
        movieTitle = "";
        movieAgeClassification = "";
        movieGenre = "";
        movieYearOfRelease = 0;
        moviePlayingTime = 0;
    }// end of default constructor

    public dvdClass(String title,int  year,String age,String genre, int time)
    {
 
        movieTitle = title;
        movieAgeClassification = age;
        movieGenre = genre;
        movieYearOfRelease = year;
        moviePlayingTime = time;
    }// end of constructor

    public String getMovieTitle()
    {
        return movieTitle;
    }
    public void setMovieTitle(String t)
    {
        movieTitle = t;
    }
 
    public int getMovieYearOfRelease()
    {
        return movieYearOfRelease;
    }
    public void setYearOfRelease(int y)
    {
        movieYearOfRelease = y;
    }
 
    public String getMovieAgeClassification()
    {
        return movieAgeClassification;
    }
    public void setMovieAgeClassification(String a)
    {
        movieAgeClassification  = a;
    }
 
    public String getMovieGenre()
    {
        return movieGenre;
    }
    public void setMovieGenre(String g)
    {
        movieGenre = g;
    }
 
    public int getMoviePlayingTime()
    {
        return moviePlayingTime;
    }
 
    //pt is the abbreviation of playing time
    public void setMoviePlayingTime(int pt)
    {
        moviePlayingTime = pt;
    }
 
    public String toString()
    {
        return movieTitle + "\t\t" + movieYearOfRelease + "\t\t" + movieAgeClassification + "\t\t" + movieGenre + "\t" + moviePlayingTime;
    }
    //end of toString method

    //display method

                public int compareTo(Object obj)
        {
 
            if (obj instanceof dvdClass)
            {
 
                dvdClass dvd = (dvdClass) obj;
                if (this.movieYearOfRelease < dvd.getMovieYearOfRelease())
                    return 1;
                else if (this.movieYearOfRelease > dvd.getMovieYearOfRelease())
                    return -1;
                    else
 
                    return(movieTitle.charAt(movieTitle.length() - 1) - movieTitle.charAt(movieTitle.length() - 1) );
 

            }
            return 0;
        }
 
    }
Posted 17-Feb-11 9:54am
Comments
Henry Minute at 17-Feb-11 15:08pm
   
Way too much code to read through.
 
Please remove anything not related to your problem.
orc_orc_orc at 17-Feb-11 15:22pm
   
I strongly agree.

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Use Array.binarSearch[^] to find the location for your insertion. Move items to the right of the insertion index, then insert your item. Here is a concise example[^] of the technique.
You may want to reserve some space at the back of the array for expansions to avoid copying every time you add an element.
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 6,569
1 Sergey Alexandrovich Kryukov 6,168
2 DamithSL 5,228
3 Manas Bhardwaj 4,717
4 Maciej Los 4,150


Advertise | Privacy | Mobile
Web03 | 2.8.1411022.1 | Last Updated 17 Feb 2011
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100