2017-07-02 22 views
-5

ちょっと私の減算ボタンと私の部門ボタンがうまくいかず、何が間違っているのかわからない。私のコードを修正できるように私を案内できるか教えてください! - ベン:)Java Eclipseの最初のCalculator GUI

enter code here 
package week07_Ben_Calculator; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

パブリッククラスAdvancedCalculatorGUIは、私はあなたを介して行っていたActionListener {

JFrame frame; 
JPanel butPanel; 
JTextField res; 
JTextField res2; 
int oper = 0; 
int currentCalc; 
double last; 
int memory = 0; 

public static void main(String[] args) { 
    // Invocation 
    EventQueue.invokeLater(new Runnable() { 
     // Override run 
     @Override 
     public void run() { 
      // Call constructor 
      new AdvancedCalculatorGUI(); 
     } 
    }); 

} 

// Create GUI 
public AdvancedCalculatorGUI() { 
    frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setTitle("Calculator"); 
    frame.setSize(400, 400); 
    frame.setLocationRelativeTo(null); 
    // New text field 
    res = new JTextField(); 
    res.setHorizontalAlignment(JTextField.RIGHT); 
    res.setEditable(false); 
    frame.add(res, BorderLayout.NORTH); 
    butPanel = new JPanel(); 
    // 2nd text field 
    res2 = new JTextField(); 
    res2.setHorizontalAlignment(JTextField.LEFT); 
    res2.setEditable(false); 
    frame.add(res2, BorderLayout.SOUTH); 

    // Create grid 
    butPanel.setLayout(new GridLayout(6, 3)); 
    frame.add(butPanel, BorderLayout.CENTER); 
    // Add button 
    for (int i = 0; i < 10; i++) { 
     addButton(butPanel, String.valueOf(i)); 
    } 
    //read button 
    JButton readButton = new JButton("Read"); 
    readButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      memory = Integer.parseInt(res.getText()); 
      res.setText(""); 
     } 
    }); 

    //store button 
    JButton storeButton = new JButton("Store"); 

storeButton.addActionListener(新しいのActionListener(){

 @Override 
     public void actionPerformed(ActionEvent e) { 

      res.setText(memory+""); 
     } 
    }); 

    // Add button + 
    JButton additionButton = new JButton("+"); 
    //additionButton.setActionCommand("+"); 
    additionButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent ev) { 

     oper = 1; 
     res2.setText(res2.getText()+"+");} 
    }); 
    operAct additionAction = new operAct(1); 
    additionButton.addActionListener(additionAction); 
    // Subtract button 
    JButton subtractionButton = new JButton("-"); 
    subtractionButton.setActionCommand("-"); 
    subtractionButton.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent ev) { 

    oper = 1; 
    res2.setText(res2.getText()+"-");} 
}); 

    operAct subtractionAction = new operAct(2); 
    subtractionButton.addActionListener(subtractionAction); 
    // Equal button 
    JButton eqButton = new JButton("="); 
    eqButton.setActionCommand("="); 
    eqButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent ev) { 
      System.out.println(oper); 
      if (!res.getText().isEmpty()) { 
       int number = Integer.parseInt(res.getText()); 
       if (oper == 1) { 
        int value = currentCalc + number; 
        last = value; 
        res.setText(Integer.toString(value)); 
        res2.setText(res2.getText()+ "=" + Integer.toString(value)); 
       } else if (oper == 2) { 
        int value = currentCalc - number; 
        last = value; 
        res.setText(Integer.toString(value)); 
        res2.setText(res2.getText()+ "=" + Integer.toString(value)); 
       } else if (oper == 3) { 
        int value = currentCalc * number; 
        last = value; 
        res.setText(Integer.toString(value)); 
        res2.setText(res2.getText()+ "=" + Integer.toString(value)); 
       } else if (oper == 4) { 
        if (number == 0) 
         res.setText("ERR"); 
        double value = currentCalc/number; 
        last = value; 
        res.setText(Double.toString(value)); 
        res2.setText(res2.getText()+ "=" + Double.toString(value)); 
       } 
      } 
     } 
    }); 

    // multiplication button 
    JButton mulButton = new JButton("*"); 
    mulButton.setActionCommand("*"); 
    mulButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent ev) { 

     oper = 1; 
     res2.setText(res2.getText()+"*");} 
    }); 

    operAct mulAction = new operAct(3); 
    mulButton.addActionListener(mulAction); 
    // division button 
    JButton divButton = new JButton("/"); 
    divButton.setActionCommand("/"); 
    divButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent ev) { 

     oper = 1; 
     res2.setText(res2.getText()+"/");} 
    }); 

    operAct divAction = new operAct(4); 
    divButton.addActionListener(divAction); 
    butPanel.add(additionButton); 
    butPanel.add(subtractionButton); 
    butPanel.add(eqButton); 
    butPanel.add(mulButton); 
    butPanel.add(divButton); 
    butPanel.add(readButton); 
    butPanel.add(storeButton); 
    frame.setVisible(true); 
} 

private void addButton(Container par, String nam) { 
    JButton b = new JButton(nam); 
    b.setActionCommand(nam); 
    b.addActionListener(this); 
    par.add(b); 
} 

@Override 
public void actionPerformed(ActionEvent ev) { 
    String act = ev.getActionCommand(); 
    res.setText(act); 
    System.out.println(ev); 
    res2.setText(res2.getText() + "" + act); 
} 

private class operAct implements ActionListener { 
    private int opt; 

    public operAct(int oper) { 
     opt = oper; 
    } 

    public void actionPerformed(ActionEvent ev) { 
     currentCalc = Integer.parseInt(res.getText()); 
     oper = opt; 
     System.out.println(oper+" "+opt+" "+ currentCalc); 
    } 
} 

}

+1

あなたが押した操作を伝えるのに 'oper'を使っているようです。この変数はどこで設定しますか? – ajb

+0

「機能しない」とはどういう意味ですか?それは間違った値を与えますか?プログラムはクラッシュしますか?代わりに追加をしますか? – JJJ

+0

この問題を解決するには、コードのデバッグを開始することができます。 –

答えて

0

を実装します最初に私は物事を簡単にすることを提案します。

簡略化するには、最初にgetText()を文字列エントリに使用し、整数に変換します。

両方ともInput TextFieldsの場合、それらをそれぞれのデータ型の別々の変数に保存して、それらのメソッドを定義することによって必要な操作を行います。

「実行された操作の方法」を毎回上書きする代わりに、getActionコマンドを使用できます。コードを読みやすくし、エラーを見つけやすくなります。