2015-12-17 69 views
1

我无法获得小计,税款和总计以显示我的程序。我知道我需要,我只是有与实施的不同组合框多的听众以及复选框处理多个操作侦听器

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

回答

2

我自己问题的动作侦听器,我会从所有这些组件删除监听器,而是添加一个到的JButton你的图形用户界面,一个“全部”JButton,一个按钮,它的责任是让用户告诉应用程序他已经完成了GUI中的所有信息输入,现在需要计算他的账单。一个监听器会被添加到那个JButton中,并且当它被按下时,它将会查询你的JComboBoxes,你的JRadioButtons和你的JCheckBoxes的状态,并且总结一切。

+0

非常感谢,这是一个很大的帮助。不知道为什么我没有想到我自己。昨天晚上5点我一直想弄清楚该怎么做。 再次感谢 – Matt

2

那么你已经拥有的方法称为计算(),所有你需要做的就是添加一个ActionListener您希望加入到每个组件,并调用该方法:

oneOfYourComboBoxes.addActionListener(new ActionListener(){ 

    @Override 
    public void onActionPerformed(ActionEvent evt){ 

     //just call calc 
     calc(); 

    } 

}); 
1

的三个组合框可以使用一个调用calc方法的ActionListener,四个复选框可以以类似的方式使用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之前,您可以创建两个监听器是这样的:

​​3210

calc方法中,附件的价格尚未考虑在内。如果你更换下面的线,它应该工作:

//subtotal = getDeckPrice()+ getTruckPrice() + getWheelPrice(); 
subtotal = getDeckPrice()+ getTruckPrice() + getWheelPrice() + getAccprice();