java - 处理多个 Action 监听器

标签 java swing actionlistener jcombobox jcheckbox

我无法为我的程序显示小计、税金和总计。我知道我需要一个 Action 监听器我只是在为不同的组合框和复选框实现多个监听器时遇到了问题

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

最佳答案

我自己,我会从所有这些组件中删除监听器,而是将一个 JButton 添加到您的 GUI,一个“完整的”JButton,一个按钮,其职责是让用户告诉应用程序他已完成将所有信息输入到GUI,现在要计算他的帐单。一个监听器将被添加到那个 JButton 上,当按下时,它将查询您的 JComboBoxes、JRadioButtons 和 JCheckBoxes 的状态,并汇总所有内容。

关于java - 处理多个 Action 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34345452/

相关文章:

java - 实际命令行运行时引用变量返回错误 "No longer attached to the DOM"

java - 我如何从软键盘启动主要 Activity

java - 是否可以扩展 WebMvcConfigurationSupport 并使用 WebMvcAutoConfiguration?

java继承: in the parent method write code that uses child variable

java - 在类之间传递值

java - 单词数组,然后嵌套 for 循环来检查字符

java - 从动态创建的 JTextField 获取值

java - 对文本字段中输入的 8 个和 4 个字符执行不同的操作

java - 检查鼠标是否位于圆圈上方 - Java

java - 在另一个类中定义并在 JFrame 中使用的 JButtton 监听器