1

私は Java の初心者であり、言語の理解とスキルを向上させるために、簡単な計算機 (および GUI) を作成するというタスクを自分自身に設定しました。

次のコードを使用します。

import java.awt.FlowLayout;
import java.io.*;
import java.awt.*;
import java.awt.event.*; 

import javax.swing.*;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class calc extends JFrame {


    public JTextField input;
    public JTextField output;
    public JPanel Window;
    public JButton math_button[] = new JButton[5];
    public JButton number_button[] = new JButton[10];
    public String[] number_button_name = {"1","2","3","4","5","6","7","8","9","0"};
    public String[] name = {"Add", "Mulitply", "Divide", "Subtract", "Equals"};
    public JFrame frame = new JFrame(); 
    public JPanel math_panel = new JPanel();
    public JPanel number_panel = new JPanel();
    public JTextField math_input = new JTextField();
    boolean trrgger = false;

    thehandler handler = new thehandler();

    public void go()
    {

        for(int b=0; b<number_button.length; b++)
        {
            number_button[b] = new JButton(number_button_name[b]);
            number_button[b].addActionListener(handler);
            number_panel.add(number_button[b]);

        }

        for(int i=0; i<math_button.length;i++)
        {
            math_button[i] = new JButton(name[i]);
            math_button[i].addActionListener(handler);
            math_panel.add(math_button[i]);

        }


        frame.getContentPane().add(BorderLayout.NORTH, math_input);
        frame.getContentPane().add(BorderLayout.SOUTH, math_panel);
        frame.getContentPane().add(BorderLayout.CENTER, number_panel);
        frame.setSize(400,400);
        frame.setVisible(true);



    }

    //Method to handle the math and return the results of whichever 'button' was pressed
    static int Math(String button_num, int first_num, int second_num)
    {
        int total = 0;
        if(button_num == "Add")
        {
            total = first_num + second_num;
        }

        else if (button_num == "Mulitply") //multiply
        {
            total = first_num * second_num;
        }

        else if (button_num == "Divide") //divide
        {
            total = first_num / second_num;
        }

        else if (button_num == "Substract") //subtract
        {
            total = first_num - second_num;
        }

        else if (button_num == "Equals") //subtract
        {
            total = total;
        }

        return total;
    }

    //Action Events - Code that is triggered once the associated button is clicked


    public class thehandler implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {


            for (int h = 0; h <math_button.length; h++)
            {
                if(event.getSource()==math_button[h])
                {
                    int firstn = Integer.parseInt(math_input.getText());
                    math_input.setText("");
                    int secondn = Integer.parseInt(math_input.getText());

                    System.out.println(calc.Math(math_button[h].getText(), firstn, secondn));

                }

            }

            for(int n=0; n<number_button.length; n++)
            {
                if(event.getSource()==number_button[n])
                {
                    String number_clicked = (number_button[n].getText());
                    String number = math_input.getText();
                    math_input.setText(number + number_clicked);

                }



            }

        }       
    }

}

このコードの背後にあるアイデアは、単純な GUI を作成し、ユーザーが必要な数の数値を入力してから、「等しい」ボタンを押して結果を表示できるようにすることです。ただし、述べたように、ロジックに問題があります。JTextField から最初に入力された数値を取得し、最初の変数が初期化されたらテキストをクリアできますが、ここでプログラムが失敗します。変数 'second_num' は 'Math' メソッドに空白として渡されます (エラーが発生します)。これは、プログラムをより流動的に使用できるようにするために ActionEvent にそのように指示するためです。ユーザーはクリアし続ける必要はありません。電卓を使用するときの入力ボックス。

誰かアイデアはありますか?

ありがとう

4

2 に答える 2

2
int firstn = Integer.parseInt(math_input.getText());
math_input.setText("");
int secondn = Integer.parseInt(math_input.getText());

上記の行が何をすることを正確に期待していますか? からテキストを取得していますmath_input。次に、空の文字列に設定します。そして、すぐに文字列を取得することで、空の文字列以外のものを取得することを期待していますか?

正しいアプローチは次のようになります。

  • ハンドラーが初めて呼び出されたとき (つまり、「数学」ボタンがクリックされたとき) に、入力を収集します。どこかに保管してください。
  • 次回このハンドラーが呼び出されると、次の入力が行われます。ユーザーが「=」をクリックして式全体を評価するまで、これが繰り返されます。

アドバイス: Java を初めて使用する場合は、最初にコマンド ラインで電卓を作成する方が簡単な場合があります。電卓の機能には GUI は必要ありません。コマンドラインでの入力の収集はより簡単です。それが機能するようになったら、Swing などのより凝ったものに進むことができます。

于 2013-07-28T10:36:56.340 に答える
0

私はあなたのコードを見ましたが、私にとっては複雑に聞こえます。Netbeans のような IDE を使用することをお勧めします。Swing アプリケーションを作成します。2つの数値を追加するには、次のようにする必要があります

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        int input_1 = Integer.parseInt(jTextField1.getText());
        int input_2 = Integer.parseInt(jTextField2.getText());        
        jTextField3.setText(String.valueOf((input_1+input_2)));
}

http://i.stack.imgur.com/1G4v7.jpg

于 2013-07-28T10:33:16.523 に答える