2012-11-09 47 views
1

所以,我有一个任务涵盖了很多。我需要:通过方法和GUI进行输入

  • 有一个GUI,底部有两个按钮。两个按钮都从我的临时文件夹中获取单独的文件。
  • 我必须使用我们过去使用的方法(collectGrades和averageGrade)和输出单击第二个按钮

当数据在中间的文本字段框我需要从数据studentscores.txt(这是一个int字段和一个双字段),并将它们放入一个StringBuilder中,然后将stringBuilder输出到jTextframe上。

private void jbtReadFileActionPerformed2(ActionEvent evt) { 
    try { 
     File inFile = new File("c:/temp/studentscores.txt"); 
     Scanner input = new Scanner(inFile); 
     String fileContents = ""; 
     while(input.hasNext()) { 
     students.add(new Student(input.nextInt(),input.nextLine())); 

    } // end while 

    for(int o = 0;o < students.size();o++) { 
    students.get(o).setGrades(collectGrades(students.get(o).getStuId())); 

    jtxtAfileContents.setText("%-10d %-20s %.2f\n", students.get(o).getStuId(),  students.get(o).getStuName(), averageGrade(students.get(o).getGrades()));); 

我如何得到这个工作?

import java.awt.*   
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.*;  
import javax.swing.*; 
import java.util.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

    public class P_Supplemental_11 extends JFrame { 

    JPanel jpnl1 = new JPanel(); 
    JPanel southPanel = new JPanel(); 
    JButton jbtReadFile1 = new JButton("Get Student Names"); 
    JButton jbtReadFile2 = new JButton("Get Student Grades"); 
    JTextField jtxtFilePath = new JTextField(); 
    JLabel jlblDesc = new JLabel("Click a button to open each file!"); 
    JTextArea jtxtAfileContents = new JTextArea(); 


    P_Supplemental_11() { 
    this.setLayout(new BorderLayout(5, 10)); 
    jpnl1.setLayout(new GridLayout(2, 2)); 
    jpnl1.add(jlblDesc); 
    //jpnl1.add(jtxtFilePath); 
    southPanel.add(jbtReadFile1); 
    southPanel.add(jbtReadFile2); 
    add(southPanel, BorderLayout.SOUTH); 
    add(jpnl1, BorderLayout.NORTH); 
    add(jtxtAfileContents, BorderLayout.CENTER); 







    jbtReadFile1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 

     jbtReadFileActionPerformed(evt); 
    } 

    }); 


    jbtReadFile2.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 

     jbtReadFileActionPerformed2(evt); 
    } 

    }); 


    } // end constructor 

    class Student { 
    private int stuId; 
    private String stuName; 
    private ArrayList<Double> grades; 

    Student(int idIn, String nameIn) { 

     this.stuId = idIn; 
     this.stuName = nameIn; 
     } // end student class 


     public int getStuId() { 
      return stuId; 
     } 


     public void setStuId(int stuId) { 
      this.stuId = stuId; 
     } 

     String getStuName() { 
      return stuName; 
     } 


     public void setStuName(String stuName) { 
      this.stuName = stuName; 
     } 


     public ArrayList<Double> getGrades() { 
      return grades; 
     } 


     public void setGrades(ArrayList grades) { 
      this.grades = grades; 
     } 



    } // end class Student 

    ArrayList<Student> students = new ArrayList(); 

    private void jbtReadFileActionPerformed(ActionEvent evt) { 
    try { 
     File inFile = new File("c:/temp/studentnames.txt"); 
     Scanner input = new Scanner(inFile); 
     String fileContents = ""; 
     while(input.hasNext()) { 
      fileContents+= input.nextLine() + "\n"; 
     } // end while 

     jtxtAfileContents.setText(fileContents); 
     input.close(); 

    } // end action method for jbtReadFile button 
    catch (FileNotFoundException ex) { 
     Logger.getLogger(P_Supplemental_11.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    } 

    private void jbtReadFileActionPerformed2(ActionEvent evt) { 
    try { 
     File inFile = new File("c:/temp/studentscores.txt"); 
     Scanner input = new Scanner(inFile); 
     String fileContents = ""; 
     while(input.hasNext()) { 
     students.add(new Student(input.nextInt(),input.nextLine())); 

    } // end while 

    for(int o = 0;o < students.size();o++) { 
    students.get(o).setGrades(collectGrades(students.get(o).getStuId())); 

    jtxtAfileContents.setText("%-10d %-20s %.2f\n", students.get(o).getStuId(),  students.get(o).getStuName(), averageGrade(students.get(o).getGrades()));); 

     /*String fileContents = ""; 
     while(input.hasNext()) { 
      fileContents+= input.nextLine() + "\n"; 
     } // end while 
     input.close(); 
     jtxtAfileContents.setText(collectGrades.getStuName); 
     */ 


    } 
    } // end action method for jbtReadFile button 
    catch (FileNotFoundException ex) { 
     Logger.getLogger(P_Supplemental_11.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 


public static ArrayList <Double> collectGrades(int inId) { 

    ArrayList <Double> outGrade = new ArrayList(); 
    try { 
     File inFile = new File("c:/temp/studentScores.txt"); 
      Scanner input = new Scanner(inFile); 
      while(input.hasNext()) { 
      int tmpInt = input.nextInt(); 
      double tmpDbl = input.nextDouble(); 
      if(tmpInt == inId) { 
       outGrade.add(tmpDbl); 
      } // end if 
      } // end while 

    } catch (FileNotFoundException ex) { 
     Logger.getLogger(P_Supplemental_11.class.getName()).log(Level.SEVERE, null, ex); 
    } // end catch 

    return outGrade; 
} // end method 

public static double averageGrade(ArrayList <Double> gradeIn) { 
    double outAvg = 0.0; 

    for(int y = 0; y < gradeIn.size();y++) { 
    outAvg+= gradeIn.get(y); 
} // end for 

return outAvg/gradeIn.size(); 

} 





public static void main(String[] args) { 
    P_Supplemental_11 frame = new P_Supplemental_11(); 
    frame.setTitle("P_Supplemenetal_10"); 
    frame.setSize(410, 520); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

} // end main 
} // end public class P_Supp_11 
+0

这里,而不是有太多的代码,你认为错误是足够的特异性。尽量缩小一点。 – awolfe91

+0

什么不适合你。 PLZ更具体:) –

+0

我编辑了具有特定问题和代码的顶部的文件。 – Dhunt90

回答

2

我把你的代码运行起来了,你的意思是?

Press the button

代码:

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

import javax.swing.*; 

public class Student extends JFrame { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Splashing"); 
       StudentView view = new StudentView(); 
       frame.getContentPane().add(view); 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frame.setMinimumSize(new Dimension(800, 450)); 
       frame.setLocationRelativeTo(null); // Center 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    static class StudentView extends JPanel { 
     JPanel jpnl1 = new JPanel(); 
     JPanel southPanel = new JPanel(); 
     JButton jbtReadFile1 = new JButton("Get Student Names"); 
     JButton jbtReadFile2 = new JButton("Get Student Grades"); 
     JTextField jtxtFilePath = new JTextField(); 
     JLabel jlblDesc = new JLabel("Click a button to open each file!"); 
     JTextArea jtxtAfileContents = new JTextArea(); 

     StudentView() { 
      this.setLayout(new BorderLayout(5, 10)); 
      jpnl1.setLayout(new GridLayout(2, 2)); 
      jpnl1.add(jlblDesc); 
      //jpnl1.add(jtxtFilePath); 
      jbtReadFile2.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        SwingUtilities.invokeLater(new Runnable() { 
         @Override 
         public void run() { 
          jtxtAfileContents.setText(collectGrades()); 
         } 
        }); 
       } 
      }); 
      southPanel.add(jbtReadFile1); 
      southPanel.add(jbtReadFile2); 
      add(southPanel, BorderLayout.SOUTH); 
      add(jpnl1, BorderLayout.NORTH); 
      add(jtxtAfileContents, BorderLayout.CENTER); 
     } 

     private String collectGrades() { 
      StringBuilder builder = new StringBuilder("Hello World"); 
      builder.append("More info"); 
      return builder.toString(); 
     } 
    } 
} 
+0

我已完成GUI - 我只需要能够点击“获取学生成绩”并通过我的collectGrades方法解析并将其传回中心的输出。 – Dhunt90

+0

所以你已经添加了一个actionListner到你的'jbtReadFile2'?这应该调用从文件读取的方法。然后输入你的'collectGrades',然后更新'jtxtAfileContents'。哪部分不起作用? – Skjalg

+0

好吧,我们更新了作业。这是另一项任务的延伸 - 我们可以通过任何方式与之聊天,这样我就可以更深入地解释了? – Dhunt90