Reputation: 33
I am having trouble getting the sub-total, tax and total to display for my program. I know I need a action listener I am just having problems with implementing multiple listeners for the different Comboboxes as well as the CheckBoxes
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.text.DecimalFormat;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class SB2_Designer extends JFrame {
private final int WINDOW_WIDTH = 400; // Window width
private final int WINDOW_HEIGHT = 500; // Window height
//Deck
private JLabel Dlabel;
private JComboBox Dbox;
//Prices for boards
public final double _Master = 60.00;
public final double _Dictat = 45.00;
public final double _Street = 50.00;
//Trucks
private JLabel Trlabel;
private JComboBox Trbox;
// Prices for Tucks
public final double _sevenSeven = 35.00;
public final double _eight = 40.00;
public final double _eightFive = 45.00;
//Wheels
private JLabel Wlabel;
private JComboBox Wbox;
// Prices for Wheels
public final double _fiveOne = 20.00;
public final double _fiveFive = 22.00;
public final double _fiveEight = 24.00;
public final double _sixOne = 24.00;
//Arrays for ComboBox
private String[] Decks = {"The Master Thrasher: $60",
"The Dictator: $45", "The Street King: $50"};
private String[] Trucks = {"7.75 inch axle: $35",
"8 inch axle: $40", "8.5 inch axle: $45"};
private String[] Wheels = {"51 mm: $20",
"55 mm: $22", "58 mm: $24",
"61 mm: $28"};
// accessories check box and label
private JLabel Atitle;
private JCheckBox GripBox;
private JCheckBox BearBox;
private JCheckBox RiseBox;
private JCheckBox BoltBox;
public final double _Grip = 10.00;
public final double _Bear = 30.00;
public final double _Rise = 2.00;
public final double _Bolt = 3.00;
// Subtotal and textfield
private JLabel StLabel;
private JTextField Stfield;
//Tax and text field
private JLabel TaxLabel;
private JTextField Taxfield;
// Total and text field
private JLabel TotLabel;
private JTextField Totfield;
// Panels
private JPanel Dpanel; // Deck panel
private JPanel Trpanel; // Trucks panel
private JPanel Wpanel; // Wheel panel
private JPanel ATitleP; // Accessories Title
private JPanel Apanel; //accessories panel
private JPanel Stpanel; // Subtotal panel
private JPanel Taxpanel; // Tax panel
private JPanel Totpanel; // Total panel
public SB2_Designer() {
// Set the title bar text.
setTitle("Skateboard Designer");
// Set the size of the window.
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
// Specify an action for the close button.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Add a GridLayout manager to the content pane.
setLayout(new GridLayout(9, 1));
// Build the panels.
buildDpanel();
buildTrpanel();
buildWpanel();
buildATitle();
buildApanel();
buildStpanel();
buildTaxpanel();
buildTotpanel();
add(Dpanel);
add(Trpanel);
add(Wpanel);
add(ATitleP);
add(Apanel);
add(Stpanel);
add(Taxpanel);
add(Totpanel);
pack();
setVisible(true);
}
// Deck panel
private void buildDpanel() {
Dpanel = new JPanel();
Dlabel = new JLabel("Decks");
Dpanel.add(Dlabel);
Dbox = new JComboBox(Decks);
Dpanel.add(Dbox);
}
public double getDeckPrice() {
double deckPrice = 0.0;
if (Dbox.getSelectedItem().equals("The Master Thrasher: $60"))
deckPrice = _Master;
else if (Dbox.getSelectedItem().equals("The Dictator: $45"))
deckPrice = _Dictat;
else if (Dbox.getSelectedItem().equals("The Street King: $50"))
deckPrice = _Street;
return deckPrice;
}
// Truck panel
private void buildTrpanel() {
Trpanel = new JPanel();
Trlabel = new JLabel("Trucks");
Trbox = new JComboBox(Trucks);
Trpanel.add(Trlabel);
Trpanel.add(Trbox);
}
public double getTruckPrice() {
double TruckPrice = 0.0;
if (Trbox.getSelectedItem().equals("7.75 inch axle: $35"))
TruckPrice = _sevenSeven;
else if (Trbox.getSelectedItem().equals("8 inch axle: $40"))
TruckPrice = _eight;
else if (Trbox.getSelectedItem().equals("8.5 inch axle: $45"))
TruckPrice = _eightFive;
return TruckPrice;
}
// Wheel panel
private void buildWpanel() {
Wpanel = new JPanel();
Wlabel = new JLabel("Wheels");
Wbox = new JComboBox(Wheels);
Wpanel.add(Wlabel);
Wpanel.add(Wbox);
}
public double getWheelPrice() {
double WheelPrice = 0.0;
if (Wbox.getSelectedItem().equals("51 mm: $20"))
WheelPrice = _fiveOne;
else if (Wbox.getSelectedItem().equals("55 mm: $22"))
WheelPrice = _fiveFive;
else if (Wbox.getSelectedItem().equals("58 mm: $24"))
WheelPrice = _fiveEight;
else if (Wbox.getSelectedItem().equals("61 mm: $28"))
WheelPrice = _sixOne;
return WheelPrice;
}
private void buildATitle() {
// Create a label.
Atitle = new JLabel("Select from the differect accessories below");
ATitleP = new JPanel();
ATitleP.add(Atitle);
}
private void buildApanel() {
// Create the check boxes.
GripBox = new JCheckBox("Grip Tape: $10");
BearBox = new JCheckBox("Bearings: $30");
RiseBox = new JCheckBox("Riser Pads: $2");
BoltBox = new JCheckBox("Nuts & Bolts Kit: $3");
// adds check box panel
Apanel = new JPanel();
Apanel.add(GripBox);
Apanel.add(BearBox);
Apanel.add(RiseBox);
Apanel.add(BoltBox);
}
public double getAccprice() {
double Accprice = 0;
if (GripBox.isSelected())
Accprice += _Grip;
if (BearBox.isSelected())
Accprice += _Bear;
if (RiseBox.isSelected())
Accprice += _Rise;
if (BoltBox.isSelected())
Accprice += _Bolt;
return Accprice;
}
private void buildStpanel() {
StLabel = new JLabel("Sub-Total:");
Stfield = new JTextField(10);
Stfield.setEditable(false);
Stfield.setText("0.00");
Stpanel = new JPanel();
Stpanel.add(StLabel);
Stpanel.add(Stfield);
}
private void buildTaxpanel() {
TaxLabel = new JLabel("Tax:");
Taxfield = new JTextField(10);
Taxfield.setEditable(false);
Taxfield.setText("0.00");
Taxpanel = new JPanel();
Taxpanel.add(TaxLabel);
Taxpanel.add(Taxfield);
}
private void buildTotpanel() {
TotLabel = new JLabel("Total:");
Totfield = new JTextField(10);
Totfield.setEditable(false);
Totfield.setText("0.00");
Totpanel = new JPanel();
Totpanel.add(TotLabel);
Totpanel.add(Totfield);
}
public void calc() {
double subtotal;
double salestax = 0.06;
double total;
double tax;
DecimalFormat dollar = new DecimalFormat("#,##0.00");
subtotal = getDeckPrice() + getTruckPrice() + getWheelPrice();
//get tax rate
tax = subtotal * salestax;
//calc tax amount
total = subtotal + tax;
//parse and format tax amount
//set tax text field with tax amount
Stfield.setText(dollar.format(subtotal));
Taxfield.setText(dollar.format(tax));
Totfield.setText(dollar.format(total));
}
public static void main(String[] args) {
new SB2_Designer();
}
}
Upvotes: 1
Views: 885
Reputation: 3622
The three combo boxes could use an ActionListener
that calls the calc
method and the four check boxes could use an ItemListener
in a similar way. You can add the following code to the SB2_Designer
constructor (using Java 8 syntax for the two listeners):
add(Dpanel);
add(Trpanel);
add(Wpanel);
add(ATitleP);
add(Apanel);
add(Stpanel);
add(Taxpanel);
add(Totpanel);
// New code starts here.
calc();
ActionListener actionListener = actionEvent -> calc();
Dbox.addActionListener(actionListener);
Trbox.addActionListener(actionListener);
Wbox.addActionListener(actionListener);
ItemListener itemListener = itemEvent -> calc();
GripBox.addItemListener(itemListener);
BearBox.addItemListener(itemListener);
RiseBox.addItemListener(itemListener);
BoltBox.addItemListener(itemListener);
// New code ends here.
pack();
setVisible(true);
For Java 7 or before, you can create the two listeners like this:
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
calc();
}
};
In the calc
method, the price of the accessories is not taken into account yet. If you replace the line below, it should work:
//subtotal = getDeckPrice()+ getTruckPrice() + getWheelPrice();
subtotal = getDeckPrice()+ getTruckPrice() + getWheelPrice() + getAccprice();
Upvotes: 1
Reputation: 999
Well you already have the method called calc(), all you need to do is add an ActionListener to each component you want that added to and call that method:
oneOfYourComboBoxes.addActionListener(new ActionListener(){
@Override
public void onActionPerformed(ActionEvent evt){
//just call calc
calc();
}
});
Upvotes: 2
Reputation: 285401
Myself, I'd remove listeners from all those components, and instead add one JButton to your GUI, a "total" JButton, a button whose responsibility is to let the user tell the app that he's done entering all info into the GUI, and now wants his bill calculated. A listener would be added to that and only that JButton, and when pressed, it will query the state of your JComboBoxes, your JRadioButtons and your JCheckBoxes, and sum everything up.
Upvotes: 2