Hello Everyone,

I feel like I'm going around in circles! I can't figure out why by JButtons won't perform their assigned functionality. I have a first, previous, next, last, and save button. I've created actionListeners and actionEvents for all butons, but they still produce nothing. Any insight is extremely appreciated!!!!

The file complies, but the Jbuttons don't do anything......

import java.awt.*;
import java.io.*;
import java.text.*;
import java.util.*;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JLabel;

public class Inventory_Program6a extends JFrame
{
	// instance variables
	static int displayBooks = 0; // variable for actionEvents

	private JButton firstButton;
	private JButton previousButton;
	private JButton nextButton;
	private JButton lastButton;
	private JButton addButton;
	private JButton deleteButton;
	private JButton modifyButton;
	private JButton saveButton;
	private JButton searchButton;

	private JTextField bookTitleField;
	private JTextField itemNumberField;
	private JTextField unitsInStockField;
	private JTextField bookPriceField;
	private JTextField inventoryValueField;
	private JTextField bookAuthorField;
	private JTextField restockingFeeField;

	private JLabel bookTitleLabel;
	private JLabel itemNumberLabel;
	private JLabel unitsInStockLabel;
	private JLabel bookPriceLabel;
	private JLabel inventoryValueLabel;
	private JLabel bookAuthorLabel;
	private JLabel restockingFeeLabel;

	private JPanel display;
	private JPanel content;
	private JTextArea textArea;
	private JLabel label;

	// Declare an array of classes
	
	private Book2 myBook[];

	// method to sort inventory by book title
	public Book2[] sortBookInventory()
    	{
        	for(int i = 0; i < myBook.length; i++) 
		{
            	String bookTitle1 = myBook[i].getBookTitle();
            	int min = i;
            	String bookTitle = bookTitle1;
            		for(int j = i+1; j < myBook.length; j++) 
			{
                	String bookTitle2 = myBook[j].getBookTitle();
                		if(bookTitle2.compareTo(bookTitle) < 0) 
				{
                    		min = j;
                    		bookTitle = bookTitle2;
                		}
            		}
            	if(!bookTitle.equals(bookTitle1)) 
		{
                	Book2 temp = myBook[i];
                	myBook[i] = myBook[min];
                	myBook[min] = temp;
           	}
        	}
        		return myBook;
	} // end method sortBookInventory

	// constructor
	public Inventory_Program6a()
	{		
		double totalInventoryValue = 0.0;

		// Specify how many items are in the array
		// instantiate Book2 object
		myBook = new Book2[5];
		myBook[0] = new Book2("The Key Triology", 1, 25, 7.99, "Nora Roberts");
		myBook[1] = new Book2("The Shinning", 2, 15, 5.99, "Stephen King");
		myBook[2] = new Book2("Wild Acre", 3, 7, 4.99, "Phillipa Gregory");
		myBook[3] = new Book2("Dark Paradise", 4, 2, 12.99, "Tami Hoag");
		myBook[4] = new Book2("Dollhouse Murders", 5, 18, 2.95, "Betty Ren Wright");
			
		// call method sort book inventory for display
		sortBookInventory();

		for (int i = 0; i<5; i++)
		{

			// display the book title
			System.out.println("The book title is: " + myBook[i].getBookTitle());

			// display the item number
			System.out.println("The item number is: " + myBook[i].getItemNumber());

			// display the number of units in stock
			System.out.println("The number of units in stock is: " + myBook[i].getBookUnits());

			// display the price per book
			System.out.printf("The price of the book is: $%.2f\n", myBook[i].getBookPrice());

			// display the value of the inventory
			System.out.printf("The value of the inventory is: $%.2f\n", myBook[i].inventoryValue());

			// display the book author
			System.out.println("The book author is: " + myBook[i].getBookAuthor());

			// display the restocking fee
			System.out.println("Restock Fee: " + myBook[i].inventoryValue() * 0.05);

			// calculate total inventory value with restocking fee added
			totalInventoryValue += (myBook[i].inventoryValue() * 1.05);

			// insert blank line
			System.out.println();

		} // end for

		// display the total value of the inventory with the restocking fee
		System.out.printf("The total value of the book inventory including the restocking fee is: $%5.2f.\n", 		

totalInventoryValue);

		// display the total value of the inventory excluding the restocking fee
		System.out.println("The total value of the book inventory is: " + totalInventoryValue());

		//JLabel constructor for logo
		Icon logo = new ImageIcon("C:/book.jpg");
		label = new JLabel(logo);
		label.setToolTipText("Joyce's Logo");
		
		// Create content panel, set layout
		content = new JPanel();
		content.setLayout(new FlowLayout());
		content.setLayout(new GridLayout(3,4));

		// create JPanel for array items
		display = new JPanel();
		display.setLayout(new FlowLayout());
		display.setLayout(new GridLayout(7,1));

		// create textArea
		textArea = new JTextArea(myBook[3]+"\n");

		// set window (JFrame) characteristics
		setLayout(new BorderLayout());
		getContentPane().add(new JScrollPane(display), BorderLayout.CENTER);
		getContentPane().add(content, BorderLayout.SOUTH);
		getContentPane().add(label, BorderLayout.NORTH);
		pack();
		setTitle("Book Inventory Program");
		setSize(400, 400); // set frame size
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);

		// initialize components	
		bookTitleField = new JTextField();
		bookTitleField.setText(myBook[displayBooks].getBookTitle()+"\n");
		bookTitleField.setEditable(false);

		itemNumberField = new JTextField();
		itemNumberField.setText(myBook[displayBooks].getItemNumber()+"\n");
		itemNumberField.setEditable(false);
	
		unitsInStockField = new JTextField();
		unitsInStockField.setText(myBook[displayBooks].getBookUnits()+"\n");
		unitsInStockField.setEditable(false);

		bookPriceField = new JTextField();
		bookPriceField.setText(myBook[displayBooks].getBookPrice()+"\n");
		bookPriceField.setEditable(false);

		inventoryValueField = new JTextField();
		inventoryValueField.setText(myBook[displayBooks].inventoryValue()+"\n");
		inventoryValueField.setEditable(false);

		bookAuthorField = new JTextField();
		bookAuthorField.setText(myBook[displayBooks].getBookAuthor()+"\n");
		bookAuthorField.setEditable(false);				

		restockingFeeField = new JTextField();
		restockingFeeField.setText(myBook[displayBooks].bookRestockingFee()+"\n");
		restockingFeeField.setEditable(false);	
			
		// initialize components
		firstButton = new JButton("First");
		content.add(firstButton);

		previousButton = new JButton("Previous");
		content.add(previousButton);

		nextButton = new JButton("Next");
		content.add(nextButton);

		lastButton = new JButton("Last");
		content.add(lastButton);

		addButton = new JButton("Add");
		content.add(addButton);

		deleteButton = new JButton("Delete");
		content.add(deleteButton);

		modifyButton = new JButton("Modify");
		content.add(modifyButton);

		saveButton = new JButton("Save");
		content.add(saveButton);

		searchButton = new JButton("Search");
		content.add(searchButton);

		// display JLabels and JTextFields on display panel
		display.add(new JLabel("Book Title: "));
		display.add(bookTitleField);

		display.add(new JLabel("Item Number: "));
		display.add(itemNumberField);

		display.add(new JLabel("Units in Stock: "));
		display.add(unitsInStockField);

		display.add(new JLabel("Book Price: "));
		display.add(bookPriceField);

		display.add(new JLabel("Inventory Value: "));
		display.add(inventoryValueField);
	
		display.add(new JLabel("Book Author: "));
		display.add(bookAuthorField);
	
		display.add(new JLabel("Restocking Fee: "));
		display.add(restockingFeeField);

		// assign actionListener and actionEvent to firstButton
		firstButton.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent event)
		{
			if (event.getActionCommand()== "First")
			{
			displayBooks = 0;
			}
		} // end firstButton actionEvent
		}); // end lastButton actionListener

		// assign actionListener and actionEvent to previousButton
		previousButton.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent event)
		{
		if (event.getActionCommand()== "Previous")
		displayBooks--;
		if (displayBooks < 0)
		{
		displayBooks = 0;
			if (displayBooks == 0)
			{
			displayBooks = displayBooks = myBook.length-1;
			}
		}
		} // end previousButton actionEvent
		}); // end previousBUtton actionListener

		// assign actionListener and actionEvent to nextButton
		nextButton.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent event)
		{
		if (event.getActionCommand()== "Next")
		displayBooks++;
		if (displayBooks >= myBook.length)
		{
		displayBooks = myBook.length-1;
			if (displayBooks == myBook.length-1)
			{
			displayBooks = 0;
			}
		}
		} // end nextButton actionEvent
		}); // end nextButton actionListener

		// assign actionListener and actionEvent to lastButton
		lastButton.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent event)
		{
		if (event.getActionCommand()== "Last")
		{
		displayBooks = myBook.length-1;
		}
		} // end lastButton actionEvent
		}); // end lastButton actionListener


		// assign actionListener and actionEvent to saveButton
		saveButton.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent event)
		{
		if (event.getActionCommand()== "Save")
		{
			FileOutputStream out;
			PrintStream p;
			try
			{
				String strDirectory = "c:/data";
				new File(strDirectory).mkdir();
				out = new FileOutputStream ("C:/data/Inventory_Program6a.dat");
				p = new PrintStream(out);
					for (int i = 0; i<= 5 - 1; i++)
					{
						p.println("Book Title: " + myBook[i].getBookTitle()+"\n");
						p.println("Item Number: " + myBook[i].getItemNumber()+"\n");
						p.println("Book Units: " + myBook[i].getBookUnits()+"\n");
						p.println("Book Price: " + myBook[i].getBookPrice()+"\n");
						p.println("Inventory Value: " + myBook[i].inventoryValue()+"\n");
						p.println("Book Restocking Fee: " + myBook[i].bookRestockingFee()+"\n");
						p.println("");
					}
				p.close();
				}
			catch (Exception e)
			{
				System.out.println("error");
			}
			}
			toString();
		} // end lastButton actionEvent
		}); // end lastButton actionListener
	} // end constructor

	// method to calculate the value of the entire inventory
	public double totalInventoryValue()
	{ 
		double totalInventoryValue = 0.00;

		for ( int counter = 0; counter < myBook.length; counter++ )

			totalInventoryValue += myBook[counter].inventoryValue();

		return totalInventoryValue;

	} // end method totalBookValue

	// main method begins execution of Java application
	public static void main( String args [])
	{
		new Inventory_Program6a();
		//create JFrame
		Inventory_Program6a inventory = new Inventory_Program6a();
		inventory.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		inventory.setVisible(true);		

	} // end method main

} // end class Inventory_Program6a

Ok, it's pretty close but missing one important step: actually showing something in your text area. The listeners change your displayBooks index, but you still need a method to show the current book. I would make a method that takes a book index value as a parameter and shows (or selects) that book. Since you aren't currently doing anything with the text area, I can't be more specific about what should go there when the selected book changes.

Thankyou so much for your response! I think I'm confused on the text area concept. Rather than use the text area, I wanted to display text fields on a JPanel and have the array populate the text fields. Am I way off base? Is the text area needed?
Thanks again!!!!!

You will definitely need to have the text fields for adding a new entry or editing an entry, so putting those in now would be just fine.

If you did want to keep the text area, you would just need a method that set the text to a string showing the currently selected book.

Last question - Am I correct in thinking that the text area is not needed and I can simply add the JTextFields to a JPanel with my array items populated in the JTextFields and still use the JButtons?

Thanks again for your help!

Well, I don't know your full requirements at this stage of the assignment. If you only need to display one current book item, then the text fields will be just fine. If you need to display the entire inventory list, you may still need the text area or a JList to display them.

This article has been dead for over six months. Start a new discussion instead.