跨多个类在一个JOption窗格中打印

时间:2016-07-31 21:10:21

标签: java dialog joptionpane

我正在尝试将所有输出放在3个不同类的一个JOption窗格中。目前,每当我打印电子书时,它们都会打印在各自的对话框中,必须一次按一个OK,以循环显示所有书籍。

我需要将它们包含在一个对话框中,以及“Programmed By”和Ebook Count / Cost部分。

我很好奇,如果我必须导入每个类。谢谢。

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);




    }
}

2 个答案:

答案 0 :(得分:1)

首先,您需要在添加Ebook时删除添加对话框的部分。相反,你想拥有一个可以同时完成所有操作的方法。

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);
}

该代码将放在EBookLibrary中。我还想注意,您可能希望查看List以存储Ebook,因为它可以根据您需要的大小来增长和缩小。

现在,在您打印签名的最后,您可以将其更改为printOrder()方法,并解析您打印的文本。

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

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

答案 1 :(得分:1)

您正在显示7个消息对话框而不是1.

只需创建一个方法,在ur Lua scope = new Lua(); Lua scope2 = new Lua(); scope2.DoString("t = { Data = 3 }"); scope.DoString("function values(key, model) return key, model end"); var func = (LuaFunction)scope["values"]; var t = (LuaTable)scope2["t"]; object[] results = func.Call("Hello", t); var tableFunc = results[1] as LuaFunction; var tableTable = results[1] as LuaTable; object[] tableFuncResult = tableFunc.Call(); 类中返回有关每个addedEbook的信息,然后主要使用循环并一次添加一个书。每次添加新图书时,图书所返回的信息(EBookLibrary)都会自动添加到string中的message2

或者,您可以编辑main方法,而不是创建新方法:

addEbook

并在String message = String.format("%s%n", ebooks[count]); count++; return message; //instead of JOptionPane 方法中:

main

试试这个,或者尝试从图书馆中取出JOptionPanes,只显示 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); 中的单个窗格。