Java 无法获取要在gui中显示的小计、合计和增值税

Java 无法获取要在gui中显示的小计、合计和增值税,java,swing,Java,Swing,首先,由于某种原因,我的图形用户界面中有数学运算,所以一本20.61的书一直显示其总数为16.43或类似的数字。除此之外,我正在尝试为应用程序中显示的增值税、合计和小计创建字段……但唯一显示的是合计。 我如何创建销售税和小计sop,它们显示为与总计相同的值 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.Scanner; import java

首先,由于某种原因,我的图形用户界面中有数学运算,所以一本20.61的书一直显示其总数为16.43或类似的数字。除此之外,我正在尝试为应用程序中显示的增值税、合计和小计创建字段……但唯一显示的是合计。 我如何创建销售税和小计sop,它们显示为与总计相同的值

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.Scanner;
import java.util.Vector;
import java.text.DecimalFormat;

public class JavaProgram extends JFrame
{
    private final String BOOK_DATA_FILENAME = "bookData1.txt";
    private final int LIST_ROWS_VISIBLE = 5;
    private final String PROGRAM_NAME = "Books'r'Us";

    private JPanel bookPanel;
    private JPanel controlPanel;
    private JPanel cartPanel;
    private JPanel checkOutPanel;

    private JList bookList;
    private JList cartList;

    private JButton addToCartButton;
    private JButton removeFromCartButton;
    private JButton clearCartButton;

    private JTextField totalText;
    private double total = 0.00;

    private Vector<Book> books = new Vector<Book>();
    private Vector<Book> cart = new Vector<Book>();

    public JavaProgram() throws IOException
    {
        setTitle( PROGRAM_NAME );
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

        setLayout( new BorderLayout() );

        buildBookPanel();
        buildControlPanel();
        buildCartPanel();
        buildCheckOutPanel();

        add( bookPanel, BorderLayout.WEST );
        add( controlPanel, BorderLayout.CENTER );
        add( cartPanel, BorderLayout.EAST );
        add( checkOutPanel, BorderLayout.SOUTH );

        pack();

        setLocationRelativeTo( null );
        setVisible( true );
    }

    private void buildBookPanel() throws IOException
    {
        bookPanel = new JPanel();
        bookPanel.setBorder( BorderFactory.createTitledBorder( "Books" ) );

        loadBooks();

        bookList = new JList( books );
        bookList.setVisibleRowCount( LIST_ROWS_VISIBLE );
        JScrollPane scrollPane = new JScrollPane( bookList );

        bookPanel.add( scrollPane );
    }

    private void loadBooks() throws IOException
    {
        File bookFile = new File( BOOK_DATA_FILENAME );
        Scanner inputFile = new Scanner( bookFile );

        while( inputFile.hasNext() )
        {
            String bookDataLine = inputFile.nextLine();
            String[] token = bookDataLine.split( "," );

            Book newBook = new Book();

            newBook.setTitle( token[0] );
            newBook.setAuthor( token[1] );
            newBook.setPrice( Double.parseDouble( token[2] ) );

            books.add( newBook );
        }

        inputFile.close();
    }

    private void buildControlPanel()
    {
        controlPanel = new JPanel();
        controlPanel.setBorder( BorderFactory.createEmptyBorder( 30, 10, 10, 10 ) );

        controlPanel.setLayout( new GridLayout( 4, 1 ) );

        addToCartButton = new JButton( "Add to Cart" );
        addToCartButton.addActionListener( new AddButtonListener() );

        removeFromCartButton = new JButton( "Remove from Cart" );
        removeFromCartButton.addActionListener( new RemoveButtonListener() );

        clearCartButton = new JButton( "Clear Cart" );
        clearCartButton.addActionListener( new ClearButtonListener() );

        controlPanel.add( addToCartButton );
        controlPanel.add( removeFromCartButton ); 
        controlPanel.add( clearCartButton );
    }

    private void buildCartPanel()
    {
        cartPanel = new JPanel();
        cartPanel.setBorder( BorderFactory.createTitledBorder( "Shopping Cart" ) );

        cartList = new JList();
        cartList.setVisibleRowCount( LIST_ROWS_VISIBLE );
        JScrollPane scrollPane = new JScrollPane( cartList );

        cartPanel.add( scrollPane );
    }

    private void buildCheckOutPanel()
    {
        checkOutPanel = new JPanel();

      checkOutPanel.add( new JLabel( "Subtotal" ) );

      totalText = new JTextField( 10 );
        totalText.setEditable( false );

      checkOutPanel.add( new JLabel( "Sales Tax" ) );

      totalText = new JTextField( 10 );
        totalText.setEditable( false );

      checkOutPanel.add( new JLabel( "Total: " ) );

        totalText = new JTextField( 10 );
        totalText.setEditable( false );

        checkOutPanel.add( totalText );
    }

    private void addToCart( Book book )
    {
        cart.add( book );
        cartList.setListData( cart );
        total += book.getPrice();
        updateTotal();
    }

    private void removeFromCart( Book book, int index )
    {
        cart.remove( index );
        cartList.setListData( cart );
        total -= book.getPrice();
        updateTotal();
    }

    private void updateTotal()
    {
        DecimalFormat fmt = new DecimalFormat( "$##,##0.00" );
        totalText.setText( fmt.format( total ) );
    }

    private class AddButtonListener implements ActionListener
   {  
        public void actionPerformed( ActionEvent e )
      {
            if( bookList.getSelectedValue()!=null )
         {
            Book selected = (Book) bookList.getSelectedValue();
            addToCart( selected );
                bookList.clearSelection();
         }
            else
                JOptionPane.showMessageDialog( JavaProgram.this,
                        "Please select a book before adding to cart.", 
                        PROGRAM_NAME, 
                        JOptionPane.PLAIN_MESSAGE );
      }
   }

    private class RemoveButtonListener implements ActionListener
   {      
        public void actionPerformed( ActionEvent e )
      {
            int selectedIndex = cartList.getSelectedIndex();

            if( selectedIndex != -1 )
         {
            Book selected = (Book) cartList.getSelectedValue();
            removeFromCart( selected, selectedIndex );
         }
            else
                JOptionPane.showMessageDialog( JavaProgram.this,
                        "Please select a book from the cart.", 
                        PROGRAM_NAME, 
                        JOptionPane.PLAIN_MESSAGE );
      }
   }

    private class ClearButtonListener implements ActionListener
   {      
        public void actionPerformed( ActionEvent e )
      {
            final int YES = 0;
            final int NO = 1;

            int choice = JOptionPane.showConfirmDialog( JavaProgram.this,
                            "Clear shopping cart?",
                            PROGRAM_NAME,
                            JOptionPane.YES_NO_OPTION );

            if( choice==YES )
            {
                cart.clear();
                cartList.setListData( cart );
                total = 0.00;
                updateTotal();
            }
        }
   }

    public static void main( String[] args ) throws IOException
    {
        new JavaProgram();
    }
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.io.*;
导入java.util.Scanner;
导入java.util.Vector;
导入java.text.DecimalFormat;
公共类JavaProgram扩展了JFrame
{
私有最终字符串BOOK\u DATA\u FILENAME=“bookData1.txt”;
私有最终整数列表\行\可见=5;
私有最终字符串程序\u NAME=“Books'r'Us”;
私人JPanel书架;
专用JPanel控制面板;
私人JPanel cartPanel;
私人JPanel checkOutPanel;
私人名册;
私人名单;
私有JButton addToCartButton;
私有JButton从CartButton移除;
私有JButton clearCartButton;
私有JTextField totalText;
私人双总=0.00;
私有向量书=新向量();
私有向量车=新向量();
publicJavaProgram()引发IOException
{
setTitle(程序名称);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(新的BorderLayout());
buildBookPanel();
buildControlPanel();
buildCartPanel();
buildCheckOutPanel();
添加(bookPanel,BorderLayout.WEST);
添加(控制面板,BorderLayout.CENTER);
添加(cartPanel,BorderLayout.EAST);
添加(checkOutPanel,BorderLayout.SOUTH);
包装();
setLocationRelativeTo(空);
setVisible(真);
}
私有void buildBookPanel()引发IOException
{
bookPanel=newjpanel();
bookPanel.setboorder(BorderFactory.createTitledBorder(“Books”));
负荷书();
bookList=新的JList(图书);
bookList.setVisibleRowCount(列表行可见);
JScrollPane scrollPane=新的JScrollPane(图书列表);
bookPanel.add(滚动窗格);
}
私有void loadBooks()引发IOException
{
文件bookFile=新文件(书籍数据文件名);
扫描仪输入文件=新扫描仪(bookFile);
while(inputFile.hasNext())
{
字符串bookDataLine=inputFile.nextLine();
String[]token=bookDataLine.split(“,”);
Book newBook=新书();
newBook.setTitle(令牌[0]);
newBook.setAuthor(令牌[1]);
setPrice(Double.parseDouble(令牌[2]);
图书。添加(新图书);
}
inputFile.close();
}
私有void buildControlPanel()
{
控制面板=新的JPanel();
controlPanel.setBorder(BorderFactory.CreateEmptyByOrder(30,10,10,10));
设置布局(新的网格布局(4,1));
addToCartButton=新的JButton(“添加到购物车”);
addToCartButton.addActionListener(新的AddButtonListener());
removeFromCartButton=新JButton(“从购物车中移除”);
addActionListener(新的RemoveButtonListener());
clearCartButton=新的JButton(“Clear Cart”);
addActionListener(新的ClearButtonListener());
控制面板。添加(addToCartButton);
控制面板。添加(从CartButton移除);
控制面板。添加(clearCartButton);
}
私有void buildCartPanel()
{
cartPanel=newjpanel();
cartPanel.setboorder(BorderFactory.createTitledBorder(“购物车”));
cartList=new JList();
cartList.setVisibleRowCount(列表行可见);
JScrollPane scrollPane=新的JScrollPane(cartList);
cartPanel.add(滚动窗格);
}
私有void buildCheckOutPanel()
{
checkOutPanel=新的JPanel();
checkOutPanel.add(新JLabel(“小计”);
totalText=新的JTextField(10);
totalText.setEditable(false);
checkOutPanel.add(新的JLabel(“销售税”));
totalText=新的JTextField(10);
totalText.setEditable(false);
checkOutPanel.add(新JLabel(“总计”);
totalText=新的JTextField(10);
totalText.setEditable(false);
checkOutPanel.add(totalText);
}
私人无效地址(书籍)
{
购物车。添加(书籍);
cartList.setListData(购物车);
合计+=book.getPrice();
updateTotal();
}
私有void removeFromCart(书本,整数索引)
{
移除(索引);
cartList.setListData(购物车);
总计-=book.getPrice();
updateTotal();
}
私有void updateTotal()
{
DecimalFormat fmt=新的DecimalFormat($###,##0.00”);
totalText.setText(fmt.format(total));
}
私有类AddButtonListener实现ActionListener
{  
已执行的公共无效操作(操作事件e)
{
if(bookList.getSelectedValue()!=null)
{
所选图书=(图书)图书列表。getSelectedValue();
addToCart(选定);
bookList.clearSelection();
}
其他的
showMessageDialog(JavaProgram.this,
“请在添加到购物车之前选择一本书。”,
程序名称,
JOptionPane.PLAIN_消息);
}
}
私有类RemoveButtonListener实现ActionListener
{      
已执行的公共无效操作(操作事件e)
{
int selectedIndex=cartList.getSelectedIndex();
如果(已选择索引!=-1)
{
所选书本=(书本)cartList.getSelectedValue();
从购物车中移除(已选择,已选择索引);
}
其他的
private JTextField subTotal;
private JTextField salesTax;
private JTextField totalText;
private void buildCheckOutPanel()
{
    checkOutPanel = new JPanel();

  checkOutPanel.add( new JLabel( "Subtotal" ) );

  subTotal = new JTextField( 10 );
    subTotal.setEditable( false );
    checkOutPanel.add( subTotal );

  checkOutPanel.add( new JLabel( "Sales Tax" ) );

  salesTax = new JTextField( 10 );
    salesTax.setEditable( false );
    checkOutPanel.add( salesTax );

  checkOutPanel.add( new JLabel( "Total: " ) );

    totalText = new JTextField( 10 );
    totalText.setEditable( false );

    checkOutPanel.add( totalText );
}
private void updateTotal()
{
    DecimalFormat fmt = new DecimalFormat( "$##,##0.00" );
    subTotal.setText( fmt.format( total ) );
    double tax =total*0.1; //if sales-tax is 10% of total
    salesTax.setText( fmt.format(tax) );
    totalText.setText(fmt.format(total+tax));

}