0

ユーザーが初期残高、年率、年数を入力する GUI を正しく再コーディングしました。15年までの数値を計算して出力します。IE (10000, 2.5, 5) は 5 つの数字を正しく生成します。問題は、ユーザーが別の入力番号で再試行することを決定したことです。以前に出力された元の 5 つの数値が電卓に残り、2 回目の再試行で新しい数値が出力されます。それがどうあるべきかどうかはわかりませんか?それとも、元の 5 つの数字を消去する必要がありますか?

コードは次のとおりです。それ以外の場合は、コーディングに問題はありません。説明が必要です。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import java.text.DecimalFormat;

public class SavingAccountFrame extends JFrame{
private static final int FRAME_WIDTH = 400;
private static final int FRAME_HEIGHT = 500;
private static final int AREA_ROWS = 10;
private static final int AREA_COLUMNS = 30;
private static final double DEFAULT_RATE = 5;
private static final double INITIAL_BALANCE = 1000;

private JLabel amountLabel1;
private JLabel amountLabel2;
private JLabel amountLabel3;
private JTextField amountField1;
private JTextField amountField2;
private JTextField amountField3;
private JButton button;
private JTextArea resultArea;
private JPanel panel;
//private BankAccount account;

public SavingAccountFrame(){
    //account = new BankAccount(INITIAL_BALANCE);
    resultArea = new JTextArea(AREA_ROWS, AREA_COLUMNS);
    resultArea.setEditable(false);
    createTextField();
    createButton();
    createPanel();
    setSize(FRAME_WIDTH, FRAME_HEIGHT);
}

private void createTextField(){
    final int FIELD_WIDTH = 10;
    amountLabel1 = new JLabel("Initial Balance: ");
    amountField1 = new JTextField(FIELD_WIDTH);
    amountField1.setText("" + 100000);
    amountLabel2 = new JLabel("Annual Rate: ");
    amountField2 = new JTextField(FIELD_WIDTH);
    amountField2.setText("" + 3.5);
    amountLabel3 = new JLabel("Number of Years: ");
    amountField3 = new JTextField(FIELD_WIDTH);
    amountField3.setText("" + 15);
}

private void createButton(){
    button = new JButton("Calculate");
    class AddInterestListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            DecimalFormat df = new DecimalFormat("0.00");
            double interest;
            double balance = Double.parseDouble(amountField1.getText());
            double rate = Double.parseDouble(amountField2.getText());
            double years = Double.parseDouble(amountField3.getText());
            for(int i = 0; i < years; i++){
                interest = balance * rate / 100;
                balance = balance + interest;
                resultArea.append("$" + df.format(balance) + "\n");
            }
        }
    }

    ActionListener listener = new AddInterestListener();
    button.addActionListener(listener);
}

private void createPanel(){
    panel = new JPanel();
    panel.add(amountLabel1);
    panel.add(amountLabel2);
    panel.add(amountLabel3);
    panel.add(amountField1);
    panel.add(amountField2);
    panel.add(amountField3);
    panel.add(button);
    JScrollPane scrollPane = new JScrollPane(resultArea);
    panel.add(scrollPane);
    add(panel);
}
}
4

1 に答える 1

1

ボタンresultAreaをクリックするたびに結果を追加していますCalculate

(少なくとも) 2 つの選択肢があります...

String出力の値を構築し、resultArea.setTextメソッドを使用してテキストを設定します。これにより、フィールドがクリアされ、指定したテキストに置き換えられます...

private void createButton(){
    button = new JButton("Calculate");
    class AddInterestListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            DecimalFormat df = new DecimalFormat("0.00");
            double interest;
            double balance = Double.parseDouble(amountField1.getText());
            double rate = Double.parseDouble(amountField2.getText());
            double years = Double.parseDouble(amountField3.getText());
            StringBuilder sb = new StringBuilder(128);
            for(int i = 0; i < years; i++){
                interest = balance * rate / 100;
                balance = balance + interest;
                sb.append("$" + df.format(balance) + "\n");
            }
            resultArea.setText(sb.toString());
        }
    }

    ActionListener listener = new AddInterestListener();
    button.addActionListener(listener);
}

または、フィールドを更新する前に aまたは emptyを使用setTextして渡してクリアしますnullString

private void createButton(){
    button = new JButton("Calculate");
    class AddInterestListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            DecimalFormat df = new DecimalFormat("0.00");
            double interest;
            double balance = Double.parseDouble(amountField1.getText());
            double rate = Double.parseDouble(amountField2.getText());
            double years = Double.parseDouble(amountField3.getText());
            resultArea.setText(null);
            for(int i = 0; i < years; i++){
                interest = balance * rate / 100;
                balance = balance + interest;
                resultArea.append("$" + df.format(balance) + "\n");
            }
        }
    }

    ActionListener listener = new AddInterestListener();
    button.addActionListener(listener);
}
于 2013-11-06T02:43:52.097 に答える