-1

パラメータ/引数をアクション イベントに渡す方法がわかりません。このプログラムは、ランダムなタイム テーブル「フラッシュ カード」を生成し、それを正しい答えと比較して、入力が正しかったかどうかをユーザーに知らせる出力をコンソールに返すことになっています。エディターは、クラスを抽象化する必要があると言っていますが、明らかにそれは解決策ではありません。

public class MultiplicationGui {

public static void main(String[] args) 
{
    //new JFrame
    JFrame myJFrame = new JFrame();

    //Attributes
    myJFrame.setTitle("Multiplication Gui");
    myJFrame.setSize(240, 200);
    myJFrame.setLocation(200, 100);
    myJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // make the frame visible 
    myJFrame.setVisible(true); 
}

 }//end class

class timesTableFrame extends JFrame implements ActionListener
{
JLabel jlblNote = new JLabel("This GUI gets data from a text field");
JLabel prompt = new JLabel("Please enter your answer");
JTextField jtfAnswer = new JTextField(20);

// constructor 
public timesTableFrame() 
{
    setLayout(new FlowLayout(FlowLayout.CENTER));

    add(jlblNote);
    add(prompt);
    add(jtfAnswer);

    // register TextFieldFrame (this method) as the listener for jtfName
    jtfAnswer.addActionListener(this);

} // end TextFieldFrame() constructor

public void actionPerformed(ActionEvent e, int answer) 
{
    // capture the name from the text field and reset the field
    double response=Double.parseDouble(jtfAnswer.getText());
    jtfAnswer.setText("");

    // output a message using the name to the console
    if (response == answer)
        System.out.println("Congratulations. You are correct!");
    else if (response != answer)
        System.out.println("Sorry, the correct answer is "+answer);

    // dispose of the frame (this frame) 
    this.dispose();


} // end actionPerformed(ActionEvent e)
  //********************************************************************

 class generateArray
 {

public int generateArray()

{
    int i, j;//variables to iterate over array
    int answer;//hold answer from indices into array
    int MDArray[][]=new int [13][13];//new md array for table


    //use nested for to populate array
    for(i=0; i<13; i++)
        for(j=0; j<13; j++)
    MDArray[i][j]=i*j;

    //generate two random numbers from 0-13 to be used as indices into array
    int index1=(int)(Math.random()*13);
    int index2=(int)(Math.random()*13);

    //populate answer variable and return
    answer = MDArray[index1][index2];
    return answer;
}

} }

4

1 に答える 1

2

実装時に定義されたものactionPerformed()同じ署名でをオーバーライドする必要がありますActionListenerActionListener

あなたが持っている

public void actionPerformed(ActionEvent e, int answer) 

これは間違った署名です。これだけあればいい

public void actionPerformed(ActionEvent e) 

int answerを のクラス メンバーとして宣言して、timesTableFrame内で使用できるようにする必要がありactionPerformedます。またはanswerのインスタンス化を通じてアクセスしますgenerateArray

補足: あなたの投稿からのコメント コンボには多くのヒントがあります。オプションについては、それらをご覧ください。

編集:オプション

クラスanswerメンバーにする

class timesTableFrame ... {
    int answer;  // now answer is a class member of timesTableeFrame

    public void actionPerformed(ActionEvent e){
        // answer can be accessed from inside this method
    }

    class generateArray{
        // answer can be accessed from inside the inner class
    }
}

answerクラスメンバーにせずに使う

class timesTableFrame ... {
    generateArray generatedArray = new generatedArray();

    public void actionPerformed(ActionEvent e){
        int answer = generatedArray.getAnswer();
    }

    class generateArray{
        private int answer;

        public int getAnswer(){
             return answer;
        }
    }
}
于 2013-11-24T09:54:40.723 に答える