Reputation: 105
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
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
Reputation: 240948
Cannot invoke toString() on the primitive type int
Use
Integer.toString(counter1);
Upvotes: 2