我对这些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;
}
}
答案 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)
有几个问题。
这是更新后的代码。我只对存款按钮进行了更改。我没有检查你的计算,但现在正在更新。寻找/ * 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);
}
}