java - 通过方法和 GUI 获取输入

标签 java swing user-interface file-io methods

所以,我的作业涉及很多内容。我需要:

  • 有一个 GUI,底部有两个按钮。两个按钮都从我的临时文件夹中获取一个单独的文件。
  • 我必须使用我们过去使用的方法(collectGrades 和averageGrade),并在单击第二个按钮时将该数据输出到中间的文本字段框

我需要从studentscores.txt(这是一个int字段和一个double字段)中获取数据并将它们放入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

最佳答案

我把你的代码放进去,让它运行,是你的意思吗?

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();
        }
    }
}

关于java - 通过方法和 GUI 获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314544/

相关文章:

java - 如何根据来自不同 Java 类的字段比较 "equivalence"的两个集合?

java - JTable如何改变背景颜色

java - 登录表单 IF-ELSE 无法正常工作

java - 在 JLayer 上方添加固定大小的 JPanel

java - 线程主 java.util.nosuchelementexception 与 new Scanner(file) 中的异常

Java swing Loader 图像无法正常显示?

java - 根据切换状态禁用/启用工具栏菜单项

Java 7 for mac 不重绘

java - Swing GUI 在 root 用户和非 root 用户下看起来不同

linux - 密码安装失败 : usermod www-data is currently used by process 875