2016-06-01 12 views
0

目的は、GUIを利用して階乗を計算するプログラムを作成することです。プログラムの結果を表示するには、jPanelまたはjFrameを作成する必要があります。次に、JTextFieldからテキストを取得し、それをコンストラクタに渡すことができるように整数に解析する必要があります。 第3に、factorialというint型のインスタンス変数を使用してオブジェクトクラスを作成する必要があります。このオブジェクトクラスには、intを受け入れ、その値をインスタンス変数に代入するFactorialという単一の引数コンストラクタが必要です。次に、戻り値の型がintのforループを使用して階乗を計算するメソッドが必要です。最後に、階乗を計算するメソッドを呼び出した後にオブジェクトの値を表示する必要があります。これまでの私の仕事はここにあります。Java Factorial GUI

import javax.swing.JFrame; 

public class factorialCalc 

{ 

    public static void main (String[] args) 

    { 

      JFrame frame=new JFrame ("Factorial Calculator"); 

      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 

      Factorial panel=new Factorial(); 

      frame.getContentPane().add(panel); 

      frame.pack(); 

      frame.setVisible(true); 

    } 

} 

そして、私の次のファイルには、Objectクラスである:

import java.awt.*; 

import java.awt.event.*; 

import javax.swing.*; 



public class Factorial extends JPanel 

{ 

      private int factorial; 

      private JLabel inputLabel,resultLabel; 

      private JTextField factorialText; 

      private JButton factButton; 



      //Constructor: sets up main GUI components 

      public void FactorialPanel(int factorial) 

      { 

       this.factorial=factorial; 

       inputLabel= new JLabel ("Please enter an integer:"); 

       factButton = new JButton("Compute"); 

       TempListener listener=new TempListener(); 

       factButton.addActionListener(listener); 

       factorialText = new JTextField(); 

       factorialText.addActionListener (new TempListener()); 

       add(inputLabel); 

       add(factorialText); 

       add(resultLabel); 

      } 

      //represents a listener for the button 

      private class TempListener implements ActionListener 

      { 

      //performs factorial operation when the 'Compute' button is pressed 

      public int computeFactorial(ActionEvent event) 

      { 

       int text=Integer.parseInt(factorial); 

       int f =1; 

       for(int i=text;i>=1;i--) 

       {  

         f = f*i; 

       } 

        resultLabel.setText(Integer.toString(f)); 

      } 

     } 

} 

これらは私がコンパイルしようとすると、私は取得するには、次のエラーです:

.\Factorial.java:31: error: Factorial.TempListener is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener 
    private class TempListener implements ActionListener 
      ^
    .\Factorial.java:37: error: incompatible types: int cannot be converted to String 
        int text=Integer.parseInt(factorial); 
              ^
    Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 
    2 errors 

なぜそれは私が解析できません文字列の階乗と整数?

また、どのようにしてcomputeFactorialメソッドを呼び出してオブジェクトの値を表示できますか?

ありがとうございました!どんな助けもありがとう!

int text=Integer.parseInt(factorialText.getText()); 

:すでにint(したがってエラー)である代わりに、ここでfactorialを使用しての

+0

'factorial'は' int'として宣言され、 'String'では宣言されません。 – Grayson

+1

'factorial'はすでに' int'であるので、 'Integer.parseInt(String)'を使うとうまくいきません。あなたの 'TempListener'は' ActionListener'を実装しているので 'public void actionPerformed(ActionEvent e)'を宣言する必要があります –

答えて

1

、...

int text=Integer.parseInt(factorial); 

...私はあなたがJTextFieldの値を取得するためのものだと思いますまた、TempListenerActionListenerを実装する場合は、ActionListenerインターフェイスに従う必要があります。この方法は、あなたがここで行ったようにあなたはただ、あなたが好きな名前に変更することはできませんactionPerformed() ...

public int actionPerformed(ActionEvent event) 

と呼ばれている:あなたのコメントに基づいて、最後に

public int computeFactorial(ActionEvent event) 

を、別の問題はあなたですあなたのコンストラクタの名前を間違えた。あなたのクラスは次のように定義されている場合:

public class Factorial extends JPanel 

次に、あなたのコンストラクタは次のようになります。

public Factorial(int factorial) // note: no void and same name as class 
+0

ありがとう!それは私の両方のコンパイルエラーを取り除きました。プログラムが実行されると、パネルは空になります。私はオブジェクトが実装されている方法に何か問題があると思います。 –

1

は、あなたのコンパイラに聞く:

error: Factorial.TempListener is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener

それは、ああ、それはだ」考えるための初心者のための簡単ですかわいそうなこと、私は物事を理解しようとするのではなく、物事を試してみます " - しかしコンパイラが何を不平を言っているかを正確に伝えるため、理解する必要があります。ここで

Factorial.TempListenerActionListenerを実装しているので、それはそれは方法actionPerformed(ActionEvent)を持っていることを想定しているあなたを語っています。しかし、その後、あなたはそれをインスタンス化することはできませんので、ちょうどabstractを追加することは助けにはなりません - ActionListenerabstractた場合

、この方法を持っていないように許可されます。

したがって、actionPerformed(ActionListener)と書く必要があります。

どのような方法で行うべきかは、SOのためのものではありません。スイングに関する本やチュートリアルを読んで理解してください。

これを修正すると間違いなく、コンパイラのエラーが増えます。それらを読みます;彼らは通常、問題がどこにあるかを教えてくれます。