2014-03-27 45 views
0

此項目的目標是創建四個類:Student類,GradStudent類,Manager類和GUI類。在GUI中有兩個單選按鈕:一個用於學生,另一個用於GradStudent。根據選擇哪一個,Manager類應該負責使用兩個數組創建和存儲Student或GradStudent對象。我還在我的GUI中添加了一個按鈕,該按鈕應該將Student數組輸出到JTextArea,但這是我遇到的問題。我得到錯誤「無法在基本類型int」上調用toString()。我明白爲什麼會發生這種情況,但我不知道如何解決這個問題。任何幫助將不勝感激。謝謝!無法將數組打印到JTextArea

GUI類

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類

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"; 
    } 


} 

回答

2

不能在基本類型int調用的toString()

使用

Integer.toString(counter1); 
+0

所有學生的名字代碼將我StudentListener類中添加這個? – Ben

+0

你改變'echoStudent.setText(counter1.toString());' –

+0

獎勵投票推動你超過100K。 :) 做得好! – Keppil

1

你可以嘗試這一個也轉換的intString

String.valueOf(counter1); 

或者你可以嘗試Integer類也

new Integer(counter1).toString(); 

或者使用

Integer.valueOf(counter1).toString(); 

- 編輯 -

按這裏你最後的意見是打印在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()); 
    } 
} 
+0

無論如何他們幾乎都是一樣的。 'String.valueOf(int)'簡單地包裝'Integer.toString(int)'。 – JonK

+0

用'echoStudent.setText([上面提到的任何一個]')替換這一行'echoStudent.setText(counter1.toString());'' – Braj

+0

@JonK是的,你是絕對正確的。有不同的做法。我的東西'Integer.valueOf(counter1)'一個很好,那麼其他,我想你知道爲什麼? – Braj