我无法获得为我的计划显示的小计,税金和总额。我知道我需要一个动作监听器我只是遇到了为不同的Comboboxes和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();
}
}
答案 0 :(得分:2)
我自己,我将从所有这些组件中删除侦听器,而是在GUI中添加一个JButton,一个"总计" JButton,一个按钮,其职责是让用户告诉应用他已完成将所有信息输入GUI,现在想要计算他的账单。只有那个JButton会添加一个监听器,当按下它时,它将查询你的JComboBoxes,你的JRadioButtons和你的JCheckBoxes的状态,并总结一切。
答案 1 :(得分:2)
您已经拥有名为calc()的方法,您需要做的就是将ActionListener添加到您想要添加的每个组件并调用该方法:
oneOfYourComboBoxes.addActionListener(new ActionListener(){
@Override
public void onActionPerformed(ActionEvent evt){
//just call calc
calc();
}
});
答案 2 :(得分:1)
三个组合框可以使用调用ActionListener
方法的calc
,并且四个复选框可以以类似的方式使用ItemListener
。您可以将以下代码添加到SB2_Designer
构造函数中(使用两个侦听器的Java 8语法):
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);
对于Java 7或之前,您可以像这样创建两个侦听器:
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
calc();
}
};
在calc
方法中,尚未考虑配件的价格。如果你替换下面的行,它应该工作:
//subtotal = getDeckPrice()+ getTruckPrice() + getWheelPrice();
subtotal = getDeckPrice()+ getTruckPrice() + getWheelPrice() + getAccprice();