【问题标题】:ArrayList prints out a code from guiArrayList 从 gui 打印出一段代码
【发布时间】:2014-04-10 10:38:40
【问题描述】:

我遇到了一些严重的问题。

我必须编写的程序是一个 GUI,它本质上要求:

  • 一门课程(例如:cpsc130)
  • 名称(例如:计算机编程 2)
  • 您获得的课程学分数量(例如 3)
  • 还有你的成绩(例如 A、B)

我对@9​​87654322@s 不是很好,基本上我不知道我在用它做什么。我必须提供ArrayList 以获取信息

  • 一个ArrayList<Course>实例变量)例如courseList,用于存储您添加的课程;
  • 四个内部ActionListener 类,每个类都实现了它的方法 执行的动作。具体来说,
  • AddCourseListener:读取输入并创建课程对象,添加课程 对象到 courseList 中,并将其附加到输出区域;
  • CalGPAListener:从 courseList 中读取所有课程学分和成绩,添加 他们起来并计算整体GPA。你假设A是4,B是3,C是2, D 为 1,E 为 0。GPA = Sum(creditpoint)=totalCredits。例如(图 1)、你修了3门课:130(3学分,A级)、131(3学分,A级) B) 和 370(4 个学分,B 级),那么你的 GPA = (3*4+3*3+4*3)/(3+3+4) = 3.3。
  • ResetInputListener:重置所有输入字段;
  • ResetOutputListener:重置输出区域。

这些都是我需要的ActionListeners。到目前为止,我将向您展示我的代码。编译后它会显示所有Buttons 和TextAreas,ActionListeners 是我唯一需要帮助的。

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


public class DegreeWorksFrame extends JFrame  {
    private JLabel courseCodeLabel;
    private JTextField courseCodeField;

    private JLabel courseNameLabel;
    private JTextField courseNameField;

    private JLabel courseCreditLabel;
    private JTextField courseCreditField;

    private JLabel courseGradeLabel;
    private JTextField courseGradeField;

    private JTextArea resultArea;

    private double sum =0;    
    private double totalCredits=0;

    private String code = "";
    private String name = "";
    private String credit = "";
    private String grade = "";

    private String heading = ("Code\tName\tCredit\tGrade" + "\n");
    private ArrayList<Course> courseList;

    private JButton AddCourse;
    private JButton CalculateGPA;
    private JButton ResetInput;
    private JButton ResetOutput;

    private static final int AREA_ROWS = 15;
    private static final int AREA_COLUMNS = 35;

    private final int FRAME_HEIGHT =400;
    private final int FRAME_WIDTH = 500;

    final int FIELD_WIDTH = 30;

    public DegreeWorksFrame() {
        resultArea = new JTextArea(AREA_ROWS, AREA_COLUMNS);
        resultArea.setText(heading);
        resultArea.setEditable(false);

        createTextField1();
        createTextField2();
        createTextField3();
        createTextField4();

        createButtonAddCourse();
        createButtonCalculateGPA();
        createButtonResetInput();
        createButtonResetOutput();

        createPanel();

        setSize(FRAME_WIDTH, FRAME_HEIGHT);
    }

    private void createTextField1() {
        courseCodeLabel = new JLabel("Enter Course Code: ");
        courseCodeField = new JTextField(FIELD_WIDTH);
        courseCodeField.setText(code);
    }

    private void createTextField2() {
        courseNameLabel = new JLabel("Enter Course Name: ");

        courseNameField = new JTextField(FIELD_WIDTH);
        courseNameField.setText(name);
    }

    private void createTextField3() {
        courseCreditLabel = new JLabel("Enter Course Credit: ");

        courseCreditField = new JTextField(FIELD_WIDTH);
        courseCreditField.setText(credit);
    }

    private void createTextField4() {
        courseGradeLabel = new JLabel("Enter Course Grade: ");

        courseGradeField = new JTextField(FIELD_WIDTH);
        courseGradeField.setText(grade);
    }


    private void createButtonAddCourse() {
        AddCourse = new JButton ("Add Courses: ");
        ActionListener listener = new addCourseListener();
        AddCourse.addActionListener(listener);
    }

    class addCourseListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            courseList = new ArrayList();
            String receiveList = userList.get
        }
    }

    private void createButtonCalculateGPA() {
        CalculateGPA = new JButton ("Calculate GPA");
        ActionListener listener = new addCourseListener();
        AddCourse.addActionListener(listener);
    }

    class calculateGPAListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {

        }
    }

    private void createButtonResetInput() {
        ResetInput = new JButton ("Reset Input");
        ActionListener listener = new addCourseListener();
        AddCourse.addActionListener(listener);
    }


    class resetInputListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {

        }
    }

    private void createButtonResetOutput() {
        ResetOutput = new JButton ("Reset Output");
        ActionListener listener = new addCourseListener();
        AddCourse.addActionListener(listener);
    }

    class resetOutputListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {

        }
    }

    private void createPanel() {
        JPanel panel = new JPanel();
        panel.add(courseCodeLabel);
        panel.add(courseCodeField);
        panel.add(courseNameLabel);
        panel.add(courseNameField);
        panel.add(courseCreditLabel);
        panel.add(courseCreditField);
        panel.add(courseGradeLabel);
        panel.add(courseGradeField);

        //buttons
        panel.add(AddCourse);
        panel.add(CalculateGPA);
        panel.add(ResetInput);
        panel.add(ResetOutput);

        //Scroll bar
        JScrollPane scrollPane = new JScrollPane(resultArea);
        panel.add(scrollPane);
        add(panel);
    }
}

【问题讨论】:

  • 您的实际问题/疑问是什么?
  • 我无法弄清楚如何让信息显示在 resultArea 中
  • 我也不太明白如何实现actionlistener。
  • 除了标题之外,我看不到 resultArea 在哪里显示任何信息?这可能是为什么? ActionListeners 通常用于用户点击/交互,最好的做法是look online
  • 我看到了一些关于附加或修改的东西?我正在尝试将它们添加到数组列表中并在结果区域中打印出来,但我不知道该怎么做。我有另一个类“Course”,它有代码、姓名、学分和等级的 getter 和 setter,我也不确定如何访问它们。

标签: java swing arraylist jpanel actionlistener


【解决方案1】:

旁注:请注意,您向AddCourse 按钮添加了多个侦听器,这是不正确的。您需要将侦听器添加到正确的按钮。

this answer 中所述,实现侦听器的一种好方法是使用匿名内部类(有关原因,请参阅链接答案以获得更好的解释)。

例如:

private void createButtonAddCourse() {
    AddCourse = new JButton ("Add Courses: ");
    AddCourse.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // Create a new Course object and add it to the ArrayList here
        }
    });
}

...

private void createButtonCalculateGPA() {
    CalculateGPA = new JButton ("Calculate GPA");
    CalculateGPA.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // Iterate over the ArrayList and calculate the overall GPA for each course
        }
    });
}

建议阅读

【讨论】:

  • 啊,那是复制和粘贴按钮的代码。那么如何创建一个新对象呢?然后我会做 courseList.add(code) 吗?等等的数组列表?此外,我会将其附加到结果区域吗?
  • 您的评论听起来像是您期待教程或导师。请注意,SO 是一个问答网站。请考虑accepting这个答案并询问一个新的(或两个)。
  • 那么我如何创建一个新对象? 这在 POO 中非常基础,你的导师一定已经向你解释了如何做到这一点。 然后我会做 courseList.add(code) 吗?数组列表等等?正确。 此外,我会将它附加到结果区域吗? 是的,如果你需要的话。 @TheShadyHobo
猜你喜欢
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2019-11-17
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多