Ben
Ben

Reputation: 105

Trouble printing an array to a JTextArea

The goal of this project is to create four classes: a Student class, a GradStudent class, a Manager class, and a GUI class. Within the GUI there are two radio buttons: one for Student and one for GradStudent. Depending on which one is selected, the Manager class is supposed to be responsible for creating and storing the Student or GradStudent objects by use of two arrays. I have also added a button to my GUI which is supposed to print the Student array to the JTextArea, however that is where I am running into issues. I get the error "Cannot invoke toString() on the primitive type int". I understand why this is happening, but I don't how to work around it. Any help would be greatly appreciated. Thanks!

GUI class

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;

public class GUI extends JFrame {
    private JRadioButton jrbStudent = new JRadioButton("Student");
    private JRadioButton jrbGraduate = new JRadioButton("Graduate");
    private JTextField name = new JTextField(20);
    private JTextField address = new JTextField(20);
    private JTextField balance = new JTextField(20);
    private JTextField major = new JTextField(20);
    private JButton jbtSubmit = new JButton("Submit");
    private JTextArea echoStudent = new JTextArea();

    private JButton printStudentNames = new JButton("Print Student's Names");
    private JButton printGradStudentNames = new JButton(
            "Print Graduate Student's Names");
    private JButton calcBalance = new JButton(
            "Calculate Average Balance of All Students");
    private JButton compSciMajor = new JButton(
            "Displays Computer Science Major Students");

    private Manager m1 = new Manager();

    public GUI() {

        // Creates panel P1 and adds the components
        JPanel p1 = new JPanel(new GridLayout(9, 1, 10, 10));
        p1.add(new JLabel("Name: "));
        p1.add(name);
        p1.add(new JLabel("Address: "));
        p1.add(address);
        p1.add(new JLabel("Balance: "));
        p1.add(balance);
        p1.add(new JLabel("Major: "));
        p1.add(major);
        p1.add(jrbStudent);
        p1.add(jrbGraduate);
        p1.add(new JLabel("Submit Button: "));
        p1.add(jbtSubmit);
        p1.add(printStudentNames);
        p1.add(printGradStudentNames);
        p1.add(calcBalance);
        p1.add(compSciMajor);
        p1.add(new JLabel("Submitted Text: "));

        // Creates a radio-button group to group both buttons
        ButtonGroup group = new ButtonGroup();
        group.add(jrbStudent);
        group.add(jrbGraduate);

        // Adds the panel and text area to the frame
        add(p1);
        p1.add(echoStudent);
        echoStudent.setEditable(false);

        // Creates a listener and registers it with the submit button
        SubmitListener l1 = new SubmitListener();
        jbtSubmit.addActionListener(l1);

        // Creates a listener and registers it with the radio buttons
        JRBListener l2 = new JRBListener();
        jrbStudent.addActionListener(l2);
        jrbGraduate.addActionListener(l2);

        // Creates a listener and registers it with the PrintStudentNames button
        StudentListener l3 = new StudentListener();
        printStudentNames.addActionListener(l3);
    }

    // Class to handle the submit button
    class SubmitListener implements ActionListener {
        public void actionPerformed(ActionEvent a) {
            Student[] students = new Student[50];
            int arrayLocation = 0;

            Student student1 = new Student(name.getText(), address.getText(),
                    balance.getText(), major.getText());
            // Checks remaining array space
            if (arrayLocation < 50) {
                students[arrayLocation] = student1;
                ++arrayLocation;
            }
            // Echos back entered text while storing the previous text
            echoStudent.setText(echoStudent.getText() + "\n"
                    + student1.toString());
        }
    }

    // Class to handle the radio buttons
    class JRBListener implements ActionListener {
        public void actionPerformed(ActionEvent b) {
            if (b.getSource() == jrbStudent) {
                m1.addStudent(name.getText(), address.getText(),
                        balance.getText(), major.getText());
                echoStudent
                        .setText("Created Student: \n" + m1.getLastStudent());
            }

            if (jrbGraduate.isSelected()) {
                m1.addGradStudent(name.getText(), address.getText(),
                        balance.getText(), major.getText());
                echoStudent.setText("Created Graduate Student: \n"
                        + m1.getLastGradStudent());
            }
        }
    }

    class StudentListener extends Manager implements ActionListener {
        public void actionPerformed(ActionEvent c) {

            echoStudent.setText(counter1.toString());

        }

    }

    public static void main(String[] args) {
        GUI frame = new GUI();
        frame.setTitle("Information Interface");
        frame.setSize(1200, 900);
        frame.setLocationRelativeTo(null); // Center the frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }

}

Manager class

public class Manager {
    public Student[] students = new Student[50];
    public int counter1 = 0;

    private GradStudent[] gradStudents = new GradStudent[50];
    private int counter2 = 0;

    public Manager() {

    }

    public void addStudent(String name, String address, String balance, String major) {
        Student student1 = new Student(name, address, balance, major);
        students[counter1] = student1;
                counter1++;
    }
    public String getLastStudent() {
        return "Student added: " + students[counter1-1] +"\n";
    }

    public void addGradStudent(String name, String address, String balance, String major) {
        GradStudent student2 = new GradStudent(name, address, balance, major);
        gradStudents[counter2] = student2;
                counter2++;
    }
    public String getLastGradStudent() {
        return "Graduate Student added: " + gradStudents[counter2-1] +"\n";
    }


}

Upvotes: 0

Views: 135

Answers (2)

Braj
Braj

Reputation: 46871

You can try this one also to convert an int into String

 String.valueOf(counter1);

Or you can try Integer class also

 new Integer(counter1).toString();

Or use

 Integer.valueOf(counter1).toString();

--EDIT--

as per your last comments here is the code to print the names of all the students in the JTextArea

class StudentListener extends Manager implements ActionListener {
    public void actionPerformed(ActionEvent c) {

        StringBuilder builder=new StringBuilder();
        for(int i=0;i<counter1;i++){
            builder.append(m1.students[i].name);
        }
        echoStudent.setText(builder.toString());
    }
} 

Upvotes: 1

Jigar Joshi
Jigar Joshi

Reputation: 240948

Cannot invoke toString() on the primitive type int

Use

Integer.toString(counter1);

Upvotes: 2

Related Questions