点击后,JButton不会计算

时间:2014-05-23 00:16:38

标签: java swing user-interface jbutton

我对这些GUI相关领域有点新手。我的问题是,当我单击下面代码中提到的JButton时,它不会计算。我尝试了几种方法,但没有运气。

任何人都能对此有所了解吗?

这是驱动程序:

package project;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class Driver extends JFrame{
    private JTextField jtfDeposit = new JTextField("0.00");
    private JTextField jtfWithdraw = new JTextField("0.00");
    private JTextField jtfTransfer = new JTextField("0.00");
    private JTextField jtfCBalance = new JTextField("0.00");
    private JTextField jtfSBalance = new JTextField("0.00");

    private JButton jbtDeposit = new JButton("Deposit");
    private JButton jbtWithdraw = new JButton("Withdraw");
    private JButton jbtTransfer = new JButton("Transfer");

    String[] depositStrings = { "Checking", "Savings"};
    String[] withdrawStrings = { "Checking", "Savings"};
    String[] transferStrings = { "CHK* to SAVA*", "SAVA* to CHK*"};

    public Driver(){
        JPanel p1 = new JPanel(new GridLayout(3,4));
        p1.add(new JLabel("Deposit Into: "));
        p1.add(new JComboBox(depositStrings));
        p1.add(jtfDeposit);
        p1.add(jbtDeposit);

        p1.add(new JLabel("Withdraw From: "));
        p1.add(new JComboBox(withdrawStrings));
        p1.add(jtfWithdraw);
        p1.add(jbtWithdraw);

        p1.add(new JLabel("Transfer From: "));
        p1.add(new JComboBox(transferStrings));
        p1.add(jtfTransfer);
        p1.add(jbtTransfer);

        p1.setBorder(new TitledBorder("WELCOME TO THE BANK OF IS247"));

        JPanel p2 = new JPanel(new GridLayout(2,2));
        p2.add(new JLabel("Checking : "));
        p2.add(jtfCBalance);
        p2.add(new JLabel("Savings : "));
        p2.add(jtfSBalance);

        p2.setBorder(new TitledBorder("YOUR BALANCES"));

        add(p1, BorderLayout.CENTER);
        add(p2, BorderLayout.SOUTH);

        jbtDeposit.addActionListener(new ButtonListener());
        jbtWithdraw.addActionListener(new ButtonListener());
        jbtTransfer.addActionListener(new ButtonListener());
    }
    class ButtonListener implements ActionListener{
        Account cAcc = new CheckingAccount();
        Account sAcc = new SavingAccount();

        @Override
        public void actionPerformed(ActionEvent e){
            String actionCommand = e.getActionCommand();
            switch (actionCommand){
                case "Deposit":
                    if("Deposit".equals(depositStrings[0])){
                        function(1);
                        break;
                    }else if("Deposit".equals(depositStrings[1])){
                        function(2);
                        break;
                    }
                case "Withdraw":
                    if("Withdraw".equals(withdrawStrings[0])){
                        function(3);
                        break;
                    }else if("Withdraw".equals(withdrawStrings[1])){
                        function(4);
                        break;
                    }
                case "Transfer":
                    if("Transfer".equals(transferStrings[0])){
                        function(5);
                        break;
                    }else if("Transfer".equals(transferStrings[1])){
                        function(6);
                    }
            }
        }
        private void function(int num){
            double dAmount = new Double(jtfDeposit.getText().trim()).doubleValue();
            double wAmount = new Double(jtfWithdraw.getText().trim()).doubleValue();
            double tAmount = new Double(jtfTransfer.getText().trim()).doubleValue();
            double cAmount = cAcc.getBalance();
            double sAmount = sAcc.getBalance();

            switch (num){
                case 1:
                    cAmount = cAcc.getDeposit(dAmount);
                    break;
                case 2:
                    sAmount = sAcc.getDeposit(dAmount);
                    break;
                case 3:
                    cAmount = cAcc.getWithdrawal(wAmount);
                    break;
                case 4:
                    sAmount = sAcc.getWithdrawal(wAmount);
                    break;
                case 5:
                    cAmount = cAcc.getTransfer(tAmount);
                    sAmount = sAcc.getDeposit(tAmount);
                    break;
                case 6:
                    sAmount = sAcc.getTransfer(tAmount);
                    cAmount = cAcc.getDeposit(tAmount);
                    break;
            }
            jtfCBalance.setText(String.valueOf(cAmount));
            jtfSBalance.setText(String.valueOf(sAmount));
        }
    }
    public static void main(String[] args){
        Driver frame = new Driver();
        frame.setTitle("Bank of IS247");
        frame.setSize(500,200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

这是父类:

package project;

public abstract class Account{
    public abstract double getBalance();
    public abstract double getDeposit(double amount);
    public abstract double getWithdrawal(double amount);
    public abstract double getTransfer(double amount);
}

子类:

package project;

public class CheckingAccount extends Account{
    double balance = 1000.00;
    double deposit;
    double withdrawal;
    double transfer;

    public CheckingAccount(){
        //no-arg constructor
    }
    public CheckingAccount(double balance, double deposit, double withdrawal,
            double transfer){
        this.balance = balance;
        this.deposit = deposit;
        this.withdrawal = withdrawal;
        this.transfer = transfer;
    }
    @Override
    public double getBalance(){
        return balance;
    }
    @Override
    public double getDeposit(double deposit){
        balance += deposit;
        return balance;
    }
    @Override
    public double getWithdrawal(double withdrawal){
        balance -= withdrawal;
        return balance;
    }
    @Override
    public double getTransfer(double transfer){
        balance = getWithdrawal(transfer);
        return balance;
    }
}

子类:

package project;

public class SavingAccount extends Account{
    double balance = 4500.00;
    double deposit;
    double withdrawal;
    double transfer;

    public SavingAccount(){
        //no-arg constructor
    }
    public SavingAccount(double balance, double deposit, double withdrawal,
            double transfer){
        this.balance = balance;
        this.deposit = deposit;
        this.withdrawal = withdrawal;
        this.transfer = transfer;
    }
    @Override
    public double getBalance(){
        return balance;
    }
    @Override
    public double getDeposit(double deposit){
        balance += deposit;
        return balance;
    }
    @Override
    public double getWithdrawal(double withdrawal){
        balance -= withdrawal;
        return balance;
    }
    @Override
    public double getTransfer(double transfer){
        balance = getWithdrawal(transfer);
        return balance;
    }
}

2 个答案:

答案 0 :(得分:1)

您有一个逻辑错误,您将depositStrings设置为{"Checking", "Savings"}并且它们永远不会更改,但您检查这些String中的任何一个是否匹配Deposit ..

if ("Deposit".equals(depositStrings[0])) {
    function(1);
    break;
} else if ("Deposit".equals(depositStrings[1])) {
    function(2);
    break;
}

我认为他们认为匹配某种"帐户"。我也认为这是其他案件的问题......

答案 1 :(得分:1)

有几个问题。

  1. 我添加了一个jtfCombo成员变量。您需要此引用,以便可以访问组合框中的值(检查,保存)。
  2. 在actionPerformed()中,您应该使用jtfCombo来获取selectedItem。然后你可以决定要做哪个功能。
  3. 你需要休息一下;声明作为每个案件中的最后一个陈述。
  4. 这是更新后的代码。我只对存款按钮进行了更改。我没有检查你的计算,但现在正在更新。寻找/ * NEW * /添加/更改:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.TitledBorder;
    
    public class Driver extends JFrame{
        private JTextField jtfDeposit = new JTextField("0.00");
        private JTextField jtfWithdraw = new JTextField("0.00");
        private JTextField jtfTransfer = new JTextField("0.00");
        private JTextField jtfCBalance = new JTextField("0.00");
        private JTextField jtfSBalance = new JTextField("0.00");
        private JComboBox jtfCombo = null; /* NEW */
    
        private JButton jbtDeposit = new JButton("Deposit");
        private JButton jbtWithdraw = new JButton("Withdraw");
        private JButton jbtTransfer = new JButton("Transfer");
    
        String[] depositStrings = { "Checking", "Savings"};
        String[] withdrawStrings = { "Checking", "Savings"};
        String[] transferStrings = { "CHK* to SAVA*", "SAVA* to CHK*"};
    
        public Driver(){
            JPanel p1 = new JPanel(new GridLayout(3,4));
            p1.add(new JLabel("Deposit Into: "));
    
            jtfCombo = new JComboBox(depositStrings); /* NEW */
            p1.add(jtfCombo); /* NEW */
            p1.add(jtfDeposit);
            p1.add(jbtDeposit);
    
            p1.add(new JLabel("Withdraw From: "));
            p1.add(new JComboBox(withdrawStrings));
            p1.add(jtfWithdraw);
            p1.add(jbtWithdraw);
    
            p1.add(new JLabel("Transfer From: "));
            p1.add(new JComboBox(transferStrings));
            p1.add(jtfTransfer);
            p1.add(jbtTransfer);
    
            p1.setBorder(new TitledBorder("WELCOME TO THE BANK OF IS247"));
    
            JPanel p2 = new JPanel(new GridLayout(2,2));
            p2.add(new JLabel("Checking : "));
            p2.add(jtfCBalance);
            p2.add(new JLabel("Savings : "));
            p2.add(jtfSBalance);
    
            p2.setBorder(new TitledBorder("YOUR BALANCES"));
    
            add(p1, BorderLayout.CENTER);
            add(p2, BorderLayout.SOUTH);
    
            jbtDeposit.addActionListener(new ButtonListener());
            jbtWithdraw.addActionListener(new ButtonListener());
            jbtTransfer.addActionListener(new ButtonListener());
        }
        class ButtonListener implements ActionListener{
            Account cAcc = new CheckingAccount();
            Account sAcc = new SavingAccount();
    
            @Override
            public void actionPerformed(ActionEvent e){
                String actionCommand = e.getActionCommand();
                switch (actionCommand){
                case "Deposit":
                    if(jtfCombo.getSelectedItem().equals(depositStrings[0])){ /* NEW */
                        System.out.println("depositing to checking..."); /* NEW */
                        function(1);
                        break;
                    }else if(jtfCombo.getSelectedItem().equals(depositStrings[1])){
                        System.out.println("depositing to savings..."); /* NEW */
                        function(2);
                        break;
                    }
                    break; /* NEW */
                case "Withdraw":
                    if("Withdraw".equals(withdrawStrings[0])){
                        function(3);
                        break;
                    }else if("Withdraw".equals(withdrawStrings[1])){
                        function(4);
                        break;
                    }
                    break; /* NEW */
                case "Transfer":
                    if("Transfer".equals(transferStrings[0])){
                        function(5);
                        break;
                    }else if("Transfer".equals(transferStrings[1])){
                        function(6);
                    }
                    break; /* NEW */
                }
            }
            private void function(int num){
                double dAmount = new Double(jtfDeposit.getText().trim()).doubleValue();
                double wAmount = new Double(jtfWithdraw.getText().trim()).doubleValue();
                double tAmount = new Double(jtfTransfer.getText().trim()).doubleValue();
                double cAmount = cAcc.getBalance();
                double sAmount = sAcc.getBalance();
    
                switch (num){
                case 1:
                    cAmount = cAcc.getDeposit(dAmount);
                    break;
                case 2:
                    sAmount = sAcc.getDeposit(dAmount);
                    break;
                case 3:
                    cAmount = cAcc.getWithdrawal(wAmount);
                    break;
                case 4:
                    sAmount = sAcc.getWithdrawal(wAmount);
                    break;
                case 5:
                    cAmount = cAcc.getTransfer(tAmount);
                    sAmount = sAcc.getDeposit(tAmount);
                    break;
                case 6:
                    sAmount = sAcc.getTransfer(tAmount);
                    cAmount = cAcc.getDeposit(tAmount);
                    break;
                }
                jtfCBalance.setText(String.valueOf(cAmount));
                jtfSBalance.setText(String.valueOf(sAmount));
            }
        }
        public static void main(String[] args){
            Driver frame = new Driver();
            frame.setTitle("Bank of IS247");
            frame.setSize(500,200);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }