Issues with a GUI and buttons... and errors...
I'm having a (big) problem understanding how to add buttons to a GUI and add textfields into a newly opened window. Plus several other issues but right now I have a selection of error meesages coming from this code and I'm not sure how to fix them:
C:\Java Program Files\BookStore9.java:50: error: non-static method add(Component) cannot be referenced from a static context
add(labelIsbn);
^
C:\Java Program Files\BookStore9.java:52: error: non-static method add(Component) cannot be referenced from a static context
add(txtIsbn);
^
C:\Java Program Files\BookStore9.java:129: error: local variable addPanel is accessed from within inner class; needs to be declared final
addPanel.add(saveButton);
^
C:\Java Program Files\BookStore9.java:143: error: local variable addPanel is accessed from within inner class; needs to be declared final
addPanel.add(cancelButton);
^
C:\Java Program Files\BookStore9.java:154: error: local variable addPanel is accessed from within inner class; needs to be declared final
frame1.add(addPanel, BorderLayout.SOUTH); // add save and cancel button to frame
^
C:\Java Program Files\BookStore9.java:156: error: local variable addPanel is accessed from within inner class; needs to be declared final
frame1.add(addPanel, BorderLayout.CENTER);
^
and here is the code:
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.text.*;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Arrays;
public class BookStore9 extends JFrame { //begin class BookStore
static int bookIndex = 0;
public static JTextArea prepareDisplay(Book myBookList, JTextArea myTextArea){
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
myTextArea.setText("");
myTextArea.append (myBookList.toString());
return myTextArea;
}
public static void main (String args[]) {
//declares TextFields
JTextField txtIsbn, txtTitle, txtPublisher, txtYear, txtPrice;
//declares labels
JLabel labelIsbn, labelTitle, labelPublisher, labelYear, labelPrice;
//add panel for save and cancel buttons
JPanel addPanel = new JPanel();
addPanel.setLayout(new GridLayout(1, 2, 3, 3));
//center area for the text fields under the add button section
JPanel centerAddPanel = new JPanel();
centerAddPanel.setLayout(new BoxLayout(centerAddPanel, BoxLayout.Y_AXIS));
//attempt at making a buuton for the add new book window (found under the add button section)
labelIsbn = new JLabel("ISBN:");
add(labelIsbn);
txtIsbn = new JTextField(10);
add(txtIsbn);
//declares text area for display of book info
final JTextArea textArea = new JTextArea(10,50);
textArea.setText("");
textArea.setEditable(false);
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
//book titles for array
Book intro = new Book("0321498054","Introduction to Programming Java - Interdisciplinary Approach", "Robert Sedgewick & Kevin Wayne", 2007, "Addison-Wesley", 83.65);
Book think = new Book("0139798099","Thinking in C++: Introduction to Standard C++", "Bruce Eckel", 2000, "Prentice Hall", 77.65);
Book build = new Book("0136091814","Building Java Programs: A Back to Basics Approach", "Stuart Reges & Marty Stepp", 2010, "Addison-Wesley", 97.02);
Book java = new Book("0596007736","Java in a Nutshell", "David Flanagan", 2005, "O'Reilly Media", 44.95);
Book learn = new Book("1449319246","Learning Java", "Patrick Niemeyer & Daniel Leuck", 2013, "O'Reilly Media", 49.99);
//array of books, with each book set to a specific array slot
final Book [] bookList = new Book[5];
bookList[0] = intro;
bookList[1] = think;
bookList[2] = build;
bookList[3] = java;
bookList[4] = learn;
//creates putton panel for next, previous, add ,delete, etc.
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(2, 4, 3, 3));
JButton firstButton = new JButton ("First");
buttonPanel.add(firstButton);
firstButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
bookIndex = 0;
prepareDisplay(bookList[bookIndex], textArea);
}
});
JButton prevButton = new JButton("Previous");
buttonPanel.add(prevButton);
prevButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookIndex --;
if (bookIndex == 0){
bookIndex = bookList.length -1;
}prepareDisplay(bookList[bookIndex], textArea);
}
});
JButton nextButton = new JButton("Next");
buttonPanel.add(nextButton);
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookIndex ++;
if (bookIndex == bookList.length - 1){
bookIndex = 0;
}
prepareDisplay(bookList[bookIndex], textArea);
}
});
JButton lastButton = new JButton("Last");
buttonPanel.add(lastButton);
lastButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookIndex = (bookList.length - 1); //set index to the last item in the array
prepareDisplay(bookList[bookIndex], textArea);
}
});
JButton addButton = new JButton("Add New Book");
buttonPanel.add(addButton);
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton saveButton = new JButton("Save");
addPanel.add(saveButton);
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int dup = 0;
//for (int i = 0; i < bookList[bookIndex]; i++){
// if (txtIsbn.getText().equals(bookList.getIsbn())){
// JOptionPane.showMessageDialog(null, "ISBN Already Exists.", "ERROR!", JOptionPane.ERROR_MESSAGE);
// break;
// }//end if
//} //end for
}//end else
});;//end save button action
JButton cancelButton = new JButton("Cancel");
addPanel.add(cancelButton);
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//frame1.dispose();
}});//end cancel button action
//build add button window
JFrame frame1 = new JFrame("Book Information");
frame1.setVisible(true);
frame1.setResizable(false);
//frame1.add(logoPanel, BorderLayout.NORTH); //add logo
frame1.add(addPanel, BorderLayout.SOUTH); // add save and cancel button to frame
frame1.add(centerPanel, BorderLayout.CENTER); // add center panel to frameframe1.setDefaultCloseOperation(HIDE_ON_CLOSE);
frame1.add(addPanel, BorderLayout.CENTER);
frame1.pack();
}//end actionPerformed
});//end
JButton delButton = new JButton("Delete Book");
buttonPanel.add(delButton);
delButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookIndex ++; //set index to the last item in the array
prepareDisplay(bookList[bookIndex], textArea);
}
});
JLabel logoLabel = new JLabel (new ImageIcon("DukeLogosm.jpg"));
JPanel logoPanel = new JPanel();
logoPanel.add(logoLabel);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS));
centerPanel.add(prepareDisplay(bookList[bookIndex], textArea)); //show the first employee
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout()); // set layout
frame.add(logoPanel, BorderLayout.NORTH); //add logo
frame.add(buttonPanel, BorderLayout.SOUTH); // add previous and next button to frame
frame.add(centerPanel, BorderLayout.CENTER); // add center panel to frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
/*
double total = 0;
// for method Books Array
for (int i = 0; i < bookList.length; i++ ) {
//textArea.append("\n\nISBN: " + bookList[i].getIsbn() + "\nTitle: " + bookList[i].getTitle() + "\nAuthor: " + bookList[i].getAuthor() + "\nYear Published: " + bookList[i].getYear() + "\nPublisher: " + bookList[i].getPublisher() + "\nList Price: " + nf.format(bookList[i].getPrice()));
total += bookList[i].getPrice();
//bookList = sortArray(bookList);
} // end for
textArea.append("\n\nTotal Cost of Inventory: " + nf.format(total));
*/
//initialize the GUI window and set the parameters
} //end main method
//Method Book array sort
public static Book[] sortArray (Book bookList[]) {
String [] titles = new String[bookList.length]; //declares new array - titles
Book [] sortedBooks = new Book[bookList.length]; //declares new array - sortedBooks
for (int i = 0; i < bookList.length; i++){//adds all Title to titles array
titles[i] = bookList[i].getTitle();
} // end for
Arrays.sort(titles); //sorts titles array
for (int i = 0; i < bookList.length; i++){ //Book Array
for (int j = 0; j < titles.length; j++){ //Titles Array
if (bookList[i].getTitle().equalsIgnoreCase(titles[j])) {
sortedBooks[j] = bookList[i];
break;
} //end if
}//end for
}//end for
return sortedBooks; //returns to sortedBooks array
} // end public book method
}//end class BookStore
class Book
{
private String isbn;
private String title;
private String author;
private int year;
private String publisher;
private double price;
private double total;
public Book ( String isbn, String title, String author, int year, String publisher, double price )
{
setIsbn (isbn);
setTitle (title);
setAuthor (author);
setYear (year);
setPublisher (publisher);
setPrice (price);
}
public String getIsbn(){
return isbn;
}
public void setIsbn (String isbn){
this.isbn = isbn;
}
public String getTitle(){
return title;
}
public void setTitle (String title){
this.title = title;
}
public String getAuthor(){
return author;
}
public void setAuthor (String author){
this.author = author;
}
public int getYear(){
return year;
}
public void setYear (int year){
this.year = year;
}
public String getPublisher(){
return publisher;
}
public void setPublisher (String publisher){
this.publisher = publisher;
}
public double getPrice(){
return price;
}
public void setPrice (double price){
this.price = price;
}
public String toString(){
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
return "ISBN:" + "\t" + isbn + "\n" +
"Title:" + "\t" + title + "\n" +
"Author:" + "\t" + author + "\n" +
"Year:" + "\t" + year + "\n" +
"Publisher:" + "\t" + publisher + "\n" +
"Price:" + "\t" + nf.format(price) + "\n\n";
}
} //end class Book
any suggestions on
1:fix the errors
2: how do I get the new window to open and display the buttons with new text fields.
Thank you