2016-07-31 37 views
-1

Ich versuche, die gesamte Ausgabe in einen JOption-Bereich über 3 verschiedene Klassen hinweg zu setzen. Im Moment, wann immer ich die Ebooks drucke, werden sie in ihren eigenen individuellen Dialogfeldern gedruckt, wobei sie einzeln auf OK drücken müssen, um durch alle Bücher zu blättern.Drucken in einem JOption-Bereich über mehrere Klassen hinweg

Ich brauche sie in einem Dialogfeld enthalten, zusammen mit den "Programmed By" und Ebook Count/Cost Abschnitt.

Und ich bin neugierig, ob ich über jede der Klassen importieren muss. Vielen Dank.

import javax.swing.JOptionPane; // dialog box 

public class Ebook 
{ 
    private String author = ""; 
    private String title = ""; 
    private double price = 0.0; 
    private String isbn = ""; 


     public Ebook(String author, String title, double price, String isbn) // ebook constructor 
     { 
      this.author = author; 
      this.title = title; 

      if (price > 0) // validate non-negative price 
       this.price = price; 

      else 
      { 
       this.price = 0.0; 
        System.out.println("Invalid price"); 
      } 

      if (isbn.length() == 10 || isbn.length() == 13) // isbn length must be exactly 10 or 13 
       this.isbn = isbn; 

      else 
       this.isbn = "None"; 
     } 

     public void setPrice(double price) 
     { 
      if (price < 0) // validate 
      { 
       System.out.println("Invalid price"); 
      } 

      else 
       this.price = price; 
     } 

     public double getPrice() 
     { 
      return price; 
     } 

     public void setAuthor(String theAuthor) 
     { 
      this.author = theAuthor; 
     } 

     public String getAuthor() 
     { 
      return author; 
     } 

     public void setIsbn(String isbn) 
     { 
      if (isbn.length() == 10 || isbn.length() == 13) // validate 
      { 
       this.isbn = isbn; 
      } 
      else 
       isbn = "None"; 
     } 

     public String getIsbn() 
     { 
      return isbn; 
     } 

     public void setTitle(String title) 
     { 
      this.title = title; 
     } 

     public String getTitle() 
     { 
      return title; 
     } 

     public String toString() 
     { 
      return String.format("Author: %s%nTitle: %s%nPrice: $%.1f%nISBN: %s%n", 
       author,title,price,isbn); 




     } 
} // This was made by -- 



import javax.swing.JOptionPane; // dialog box 

public class EbookLibrary 
{ 
    private int count = 0; 
    private double total_cost = 0.0; 


    Ebook[] ebooks = new Ebook[25]; // array of ebook objects 

    public EbookLibrary() // no argument constructor for ebooklibrary object in library test 
    { 

    } 
    public int getCount() // total number of ebooks 
    { 
     return count; 
    } 
    public double getCost() // sum of all ebooks 
    { 
     return total_cost; 
    } 
    public String toString() // formatted string with the number and cost of all ebooks 
    { 
     String message2 = String.format("Ebook count: %d%nTotal Cost: $%.1f", count, total_cost); // for dialog box 



     return message2; 
    } 
    public void addEbook(String author, String title, double price, String isbn) // adds ebooks to the array 
    { 

    if (count < 25) // dont walk off array 
    { 


     Ebook anEbook = new Ebook(author,title,price,isbn); // ebook object to be created when addEbook is called 

     ebooks[count] = anEbook; 

     total_cost += price; // total of all the books 

     String message = String.format("%s%n", ebooks[count]); 
      JOptionPane.showMessageDialog(null,message); // display books in dialog boxes 

     count++; // increment count each time 


    } 



    } 



} // This was made by ------ 

import javax.swing.JOptionPane; // dialog box 

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

     EbookLibrary aLibrary = new EbookLibrary(); // EbookLibrary object for calling addEbook 

     // ebook objects 
     aLibrary.addEbook("Blah", "What", 88.8, "1234567891") 
     aLibrary.addEbook("Thing Do", "What What", 45.0, "1234567891111"); 
     aLibrary.addEbook("Stephen King","The Thing",1.1, "1234567891"); 
     aLibrary.addEbook("Robert","A Title", -1.0, "1234567891"); // test invalid price, should return 0.0 and "invalid price" 
     aLibrary.addEbook("Tom","Bad Title", 33.1, "1234567891111"); 
     aLibrary.addEbook("Bob", "FML and Other Acronyms", 25.0, "1"); // test ISBN value, should return "None" 


     aLibrary.getCount(); 
     aLibrary.getCost(); 

     String message = "Programmed by ---- "; 
      String message2 = String.format("%s%n", aLibrary.toString()); 
       JOptionPane.showMessageDialog(null,message + "\n " + message2); 




    } 
} 

Antwort

1

Well off erstes müssen Sie diesen Teil entfernen, wo Sie einen Dialog hinzufügen, wenn ein Ebook hinzugefügt wird. Stattdessen möchten Sie eine Methode haben, die alles auf einmal erledigt.

public void printOrder(String signature){ 
    String message = ""; 
    for (int q = 0; q < count; q++){ 
     message += String.format("%s%n", ebooks[q]); 
    } 
    message += signature; 
    JOptionPane.showMessageDialog(null,message); 
} 

Dieser Code würde in der EBookLibrary gehen. Ich wollte auch darauf hinweisen, dass Sie möglicherweise in List zum Speichern von Ebook suchen, weil es wachsen und verkleinern kann, je nachdem, welche Größe Sie benötigen.


nun am Ende, wo Sie Ihre Unterschrift gedruckt werden sollten, können Sie das auf die printOrder() Methode ändern und den Text analysieren, die Sie heraus gedruckt haben würden.

String message = "Programmed by ---- "; 
String message2 = String.format("%s%n", aLibrary.toString()); 

aLibrary.printOrder(message + "\n " + message2); 
1

Sie die Anzeige 7-Meldung Dialoge statt 1.

Erstellen Sie einfach eine Methode, um die Informationen zu jedem addedEbook innerhalb ur EBookLibrary Klasse zurückzukehren und dann in Haupt Verwendung einer Schleife und haben die Bücher hinzugefügt einzeln eine Zeit. Jedes Mal, wenn Sie ein neues Buch hinzufügen, fügt sich die vom Buch zurückgegebene Information (string) zur message2 in Ihrer main hinzu.

Oder, anstatt eine neue Methode zur Erstellung können Sie die addEbook Verfahren wie das bearbeiten:

String message = String.format("%s%n", ebooks[count]); 
count++; 
return message; //instead of JOptionPane 

und in der main Methode:

EbookLibrary aLibrary = new EbookLibrary(); // EbookLibrary object for calling addEbook 
    String message = "Programmed by ---- "; 

    while(count < 25) { 
    // ebook objects 
    message += aLibrary.addEbook("Blah", "What", 88.8, "1234567891") + '/n': 
    message += aLibrary.addEbook("Thing Do", "What What", 45.0, "1234567891111") + '/n'; 
    message += aLibrary.addEbook("Stephen King","The Thing",1.1, "1234567891") + '/n'; 
    message += aLibrary.addEbook("Robert","A Title", -1.0, "1234567891") + '/n'; // test invalid price, should return 0.0 and "invalid price" 
    message += aLibrary.addEbook("Tom","Bad Title", 33.1, "1234567891111") + '/n'; 
    message += aLibrary.addEbook("Bob", "FML and Other Acronyms", 25.0, "1") + '/n'; // test ISBN value, should return "None" 


    aLibrary.getCount(); 
    aLibrary.getCost(); 


     //String message2 = String.format("%s%n", aLibrary.toString()); 
      JOptionPane.showMessageDialog(null,message); 

die Sie interessieren, oder versuchen Sie einfach die JOptionPanes herausnehmen aus der Bibliothek und zeigen nur das einzelne Fenster in main.