Вы находитесь на странице: 1из 7

//Import needed packages

import java.awt.*;
import java.awt.event.*;

import java.util.Scanner;
import java.io.*;

import javax.swing.JOptionPane;
import javax.swing.DefaultListModel;
import javax.swing.*;

import java.text.DecimalFormat;

public class BookStoreGUI extends JFrame {

private static final int WINDOW_WIDTH= 800; //Width of GUI frame


private static final int WINDOW_LENGTH = 250; //Length of GUI frame

private JPanel booksPanel; //Holds all the books


private JPanel buttonsPanel; //Has add/remove/checkout buttons
private JPanel shoppingCartPanel; //To hold books added by user
private JPanel bannerPanel; //Banner panel
private JPanel searchButtonsPanel; //Holds search/showall buttons

private JList booksList; //List with all book names


private JList selectedList; //List in shopping cart

private JButton addSelected; //Adds book to shopping cart


private JButton removeSelected; //Removes book from shopping cart
private JButton checkOut; //Adds all books prices + taxes
private JButton searchButton; //Searches for desired book
private JButton showAllButton; //shows all books available

private bookInfo booksInfo = new bookInfo(); //BookInfo object


private String[] bookNames = booksInfo.getBookNames(); //Array that Holds
all book names
private double[] bookPrices = booksInfo.getBookPrices();//Array that holds
all book prices

private JScrollPane scrollPane1; //Holds available books list


private JScrollPane scrollPane2; //Holds selected book list

private JLabel panelTitle; //Panel title


private JLabel cartTitle; //Panel title
private JLabel banner; //Panel title

private JTextField searchField; //Allows user to input search

private int element = -1; // control variable


private int selectedIndex; //Index selected among available
books
private int index; //Int that holds selected
index.
private int i,count; //Control variables

private double total; //Total of prices


private double bookPrice; //Hold book prices
private final double TAX=0.06; //Constant for tax value

private ListModel books; //List model for book name list


private ListModel shoppingCart; //List model for shopping cart list
private DefaultListModel shoppingCartDFM;

private DecimalFormat money; //Money format


private Object selectedBookName; //Selected book

private String searchResults; //Hold search results


private String notFound = " Title not found"; //Holds search results

private boolean found = false; //Boolean holds false if search


results not found

/*Constructor
* BookStoreGUI - Buuilds a GUI with multiple panels
*/
public BookStoreGUI() throws IOException{
//Title of GUI
setTitle("Book Store Shopping Cart");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setSize(WINDOW_WIDTH, WINDOW_LENGTH);

//BuildPanels
buildBooksPanel();
buildButtonsPanel();
buildShoppingCartPanel();
buildBannerPanel();
buildSearchButtonsPanel();

//Add panels to GUI frame


add(bannerPanel,BorderLayout.NORTH);
add(booksPanel, BorderLayout.WEST);
add(buttonsPanel, BorderLayout.CENTER);
add(shoppingCartPanel, BorderLayout.EAST);
add(searchButtonsPanel, BorderLayout.SOUTH);

//set visibility
setVisible(true);
pack();
}

//METHODS
/*
*buildBooksPanel() - Builds panel containing a JList/ScrollPane
*/
public void buildBooksPanel(){

//Create panel to hold list of books


booksPanel = new JPanel();

//Set Panel layout


booksPanel.setLayout(new BorderLayout());

//Create the list


booksList = new JList(bookNames);
//Set selection preferrence

booksList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
//Visible book names
booksList.setVisibleRowCount(5);

//Create scroll pane containing book list


scrollPane1 = new JScrollPane(booksList);
scrollPane1.setPreferredSize(new Dimension(175,50));

//JLabel/Panel title
panelTitle = new JLabel("Available Books");

//Add JLabel and scroll to panel


booksPanel.add(panelTitle, BorderLayout.NORTH);
booksPanel.add(scrollPane1);
}

/*
* buildButtonsPanel - builds panel containing add/remove/checkout buttons
*/
public void buildButtonsPanel(){
//Create panel to hold buttons
buttonsPanel = new JPanel();
//Set Layout
buttonsPanel.setLayout(new GridLayout(3,1));
//Create Buttons
addSelected = new JButton("Add Selected Item");
removeSelected = new JButton("Remove Selected Item");
checkOut = new JButton("Check Out");

//add Listeners
addSelected.addActionListener(new AddButtonListener());
removeSelected.addActionListener(new RemoveButtonListener());
checkOut.addActionListener(new CheckOutButtonListener());

//Add button panel to GUI


buttonsPanel.add(addSelected);
buttonsPanel.add(removeSelected);
buttonsPanel.add(checkOut);
}
/*
* buildShoppingCartPanel builds panel containing JList/Scroll pane
*/
public void buildShoppingCartPanel(){
//Create panel
shoppingCartPanel = new JPanel();

//Set panel layout


shoppingCartPanel.setLayout(new BorderLayout());

//Create shopping cart list


selectedList = new JList();

//Set row visility


selectedList.setVisibleRowCount(5);

//Create scrollpane containin selected list items


scrollPane2 = new JScrollPane(selectedList);

scrollPane2.setPreferredSize(new Dimension(175,50));
//JLabel/Panel title
cartTitle = new JLabel("Shopping Cart ");

//Add JLabel and scroll pane to panel


shoppingCartPanel.add(cartTitle, BorderLayout.NORTH);
shoppingCartPanel.add(scrollPane2);
}

/*
* buildBannerPanel - builds panel containing banner for GUI
*/
public void buildBannerPanel(){
//Create panel
bannerPanel = new JPanel();

//Set Border layout


setLayout(new BorderLayout());

//String containing JLabel text


String labelText= "<html><b COLOR=RED> Welcome</b>" + "<b><i
COLOR=#006363> To </i></b>" +
"<b><u COLOR=#BF3030>As</u><u
COLOR=#8170D8>The</u><u COLOR=#00CC00>Pages</u><u COLOR=BLUE>Turn.com</u></b>" ;

//create JLabel
JLabel banner = new JLabel(labelText);
banner.setFont(new Font("Serif",Font.BOLD,28));

//add banner to panel


bannerPanel.add(banner);
}

/*
* buildSearchButtonsPanel - builds panel containing search and showall
buttons
*/
public void buildSearchButtonsPanel(){
//Create panel
searchButtonsPanel = new JPanel();

//Set Border layout


searchButtonsPanel.setLayout(new GridLayout(1, 3 ,5,5));
//Create buttons
searchButton = new JButton("Search");
showAllButton = new JButton("Show All");

//Create text field


searchField = new JTextField(15);

//Add listeners
searchButton.addActionListener(new SearchButtonListener());
showAllButton.addActionListener(new ShowAllButtonListener());

//Add buttons and text field to panel


searchButtonsPanel.add(searchField);
searchButtonsPanel.add(searchButton);
searchButtonsPanel.add(showAllButton);
}

//ACTION LISTENERS
/*
* AddButtonListener - adds selected item to shopping cart upon selection
*/
public class AddButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {

selectedIndex = booksList.getSelectedIndex();
selectedBookName = booksList.getSelectedValue();

books = booksList.getModel();
shoppingCart = selectedList.getModel();

shoppingCartDFM = new DefaultListModel();

for(count=0; count<shoppingCart.getSize(); count++){

shoppingCartDFM.addElement(shoppingCart.getElementAt(count));
}

if(element == -1)
bookPrice += bookPrices[selectedIndex];
else
bookPrice += bookPrices[element];

shoppingCartDFM.addElement(selectedBookName);
selectedList.setModel(shoppingCartDFM);
}
}
/*
* RemoveButtonListener - Removes selected item from shopping cart upon
selection
*/
public class RemoveButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {

index = selectedList.getSelectedIndex();
((DefaultListModel)selectedList.getModel()).remove(index);

if(element == -1)
if(bookPrices[selectedIndex] <= bookPrice)
bookPrice -= (bookPrices[selectedIndex]);
else
bookPrice = (bookPrices[index]) - bookPrice;
else
if(bookPrices[element] <= bookPrice)
bookPrice -= (bookPrices[element]);
else
bookPrice = (bookPrices[index]) - bookPrice;
}
}

/*
* CheckOutButtonListener - Calculates total and displays it to user
*/
public class CheckOutButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {

money = new DecimalFormat("#,##0.00");


total = (bookPrice + (bookPrice*TAX));

JOptionPane.showMessageDialog(null, "Subtotal: $" +


(money.format(bookPrice)) + "\n" +
"Tax: $" +
(money.format((bookPrice*TAX))) + "\n" +
"Total: $" +
(money.format(total)));
}
}

/*
* SearchButtonListener - searches for user desired item
*/
public class SearchButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {

index = 0;

while(!found && index < bookNames.length)


{
if(bookNames[index].equals(searchField.getText())){
found = true;
element = index;
}
index++;
}

if(element == -1){
booksList.setModel(new DefaultListModel());

((DefaultListModel)booksList.getModel()).addElement(notFound);
}
else{
searchResults = bookNames[element];
booksList.setModel(new DefaultListModel());

((DefaultListModel)booksList.getModel()).addElement(searchResults);
}
}
}

/*
* ShowsAllButtonListener - shows all available books
*/
public class ShowAllButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {

booksList.setModel(new DefaultListModel());

for(i=0; i < bookNames.length; i++){

((DefaultListModel)booksList.getModel()).addElement(bookNames[i]);

}
}
}

public static void main(String[] args) throws IOException{

new BookStoreGUI();
}
}

Вам также может понравиться