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