سؤال

أحاول أن أتعلم عن معالجات أحداث Java والاستمرار في الحصول على أخطاء بنوع النوع (ثابت / غير ثابت). بعض الكود أحاول الكتابة تبدو وكأنها:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Main extends JFrame implements ActionListener{

  static private int[] intArray = new int[10000];
  static private int numOfInts = 0;
  static private int avg = 0;

  public static void main(String[] args) {

    //create main frame
    JFrame frame = new JFrame();
    frame.setTitle("Section V, question 2");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(350, 250);
    frame.setLayout(new GridLayout(4, 1));
    frame.setVisible(true);

  //create instruction label and add to frame
  Label instructions = new Label("Follow the instructions on the exam to use this program");
  frame.add(instructions);

  //create textfield for index entry and add to frame
  JTextField indexEntry = new JTextField();
  frame.add(indexEntry);

  //create button for average and add to frame
  JButton avgBtn = new JButton("Click for Average");
  frame.add(avgBtn);
  avgBtn.addActionListener(avgBtn);

  //create panel to display results and add to frame
  JPanel resultsPanel = new JPanel();
  resultsPanel.setBackground(Color.BLUE);
  frame.add(resultsPanel);

  //read in from file
  readFromFile();

  //compute average
  computeAverage();

  System.out.println(avg);

}

static private void readFromFile(){
  try{
    // Open the file that is the first
    // command line parameter
    FileInputStream fstream = new FileInputStream("numbers.dat");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;
    //Read File Line By Line
    int i = 0;
    while ((strLine = br.readLine()) != null)   {
      // Print the content on the console
      System.out.println (strLine);
      intArray[i] = Integer.parseInt(strLine);
      numOfInts++;
      i++;
    }
    //Close the input stream
    in.close();
    System.out.println ("numOfInts = " + numOfInts);
  }
  catch (Exception e){//Catch exception if any
    System.err.println("Error: " + e.getMessage());
  }
}

static private void computeAverage(){
  int sum = 0;

  for(int i = 0; i < numOfInts; i++)
    sum += intArray[i];

  avg = sum/numOfInts;

  //return avg;
}

public void actionPerformed(ActionEvent e){
      if(e.getSource() == avgBtn){
        computeAverage();
  }
}

}

من المفترض أن يقوم بإعداد قراءة واجهة المستخدم الرسومية في بعض Ints من ملف ثم حساب متوسطها عند الضغط على زر. ومع ذلك، فإنني أظل مشاكل مع الأشياء الثابتة / غير الثابتة وأعمل الأحداث. خطأي الحالي هي:
main.java:35: addactractener (java.awt.event.actionlistener) في javax.swing.abstractbutton لا يمكن تطبيقها على (javax.swing.jbutton)
Avgbtn.addactionListener (AVGBTN)؛

Main.java:91: لا يمكن العثور على رمز
رمز: متغير AVGBTN
الموقع: الطبقة الرئيسية
إذا (e.getsource () == AvgBTN) {

أفهم أن المحول البرمجي لا يمكنه العثور على AVGBTN لأنه محدد داخل وظيفة أخرى (الرئيسية ())، ولكن هل يمكن لأي شخص أن يلقي بعض الضوء على كيفية إرفاق معالج حدث إليه؟ حاول "هذا" دون جدوى أيضا ... شكرا مقدما، وإذا كنت ترى أي شيء آخر خطأ أحب أن أسمع كيف يمكنني تحقيقه بشكل أفضل.

هل كانت مفيدة؟

المحلول

الكود الخاص بك هو فوضوي بعض الشيء، سيكون هناك أخطاء بناء على بناء الجملة إذا تم تجميعها. يجب عدم خلط مكونات التأرجح / AWT، على سبيل المثال: بدلا من استخدام تسمية استخدم Jlabel في Swing، لاستخدام اللوحة JPanel.

يحيط علما بادئة "J" للتأرجح، يجب أن تكون تقرأ كتبا ربما إذا كنت تريد معرفة المزيد عن Java (Swing) أو حتى اقرأ بعض البرامج التعليمية الأساسية.

لا تستخدم الطرق الثابتة إلا إذا كنت تفهم غرضها.

Anyhow هنا هو أقرب مدونة لما تريد:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Main extends JFrame implements ActionListener {
    private int[] intArray = new int[10000];
    private int numOfInts = 0;
    private int avg = 0;

    protected JButton avgBtn;
    protected JTextField indexEntry;
    protected JLabel instructions;
    protected JPanel resultsPanel;

    //constructor - construct the components here and do the initializations
    public Main(){
        //create main frame     
        this.setTitle("Section V, question 2");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(350, 250);
        this.setLayout(new GridLayout(4, 1));
        //this.setVisible(true);

        //create instruction label and add to frame
        instructions = new JLabel("Follow the instructions on the exam to use this program");
        this.add(instructions);

        //create textfield for index entry and add to frame
        indexEntry = new JTextField();
        this.add(indexEntry);

        //create button for average and add to frame
        avgBtn = new JButton("Click for Average");
        this.add(avgBtn);
        avgBtn.addActionListener(this);

        //create panel to display results and add to frame
        resultsPanel = new JPanel();
        resultsPanel.setBackground(Color.BLUE);
        this.add(resultsPanel);

        //read in from file
        readFromFile();

        //compute average
        computeAverage();
        System.out.println(avg);
    }

    private void readFromFile() {
        try {
            // Open the file that is the first
            // command line parameter
            FileInputStream fstream = new FileInputStream("numbers.dat");
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            //Read File Line By Line
            int i = 0;
            while ((strLine = br.readLine()) != null) {
                // Print the content on the console
                System.out.println (strLine);
                intArray[i] = Integer.parseInt(strLine);
                numOfInts++;
                i++;
            }
            //Close the input stream
            in.close();
            System.out.println ("numOfInts = " + numOfInts);
        }
        catch (Exception e) {
            //Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }
    }
    private void computeAverage() {
        int sum = 0;
        for (int i = 0; i < numOfInts; i++)
        sum += intArray[i];
        avg = sum/numOfInts;
        //return avg;
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == avgBtn) {
            computeAverage();
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        m.setVisible(true);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top