2014-03-26 3 views
1

학생, 대학 및 출구에 3 개의 메뉴 항목이있는 작은 프로그램을 만들려고합니다. 거의 완성되었지만 컴파일되지만 학생과 대학 메뉴 항목은 내부 자바 패널을 열지 못합니다.menuItems가 클릭되었을 때 Java 내부 패널이 열리지 않습니다

는 대학에 대한 패널을 가진 메뉴 데스크톱 응용 프로그램을 작성하는 프로그램을 작성 :

는 다음과 같이 할당 문제는 읽어 내 자바 2 검토를위한 별도의 신용 질문 (정말 포인트가 필요합니다) 그 학생용 패널. 대학 패널에는 이름과 상태 코드가 있습니다. 학생 패널에는 이름과 ID가 있습니다. 사용자는 각각 University 및 Student의 이름과 코드 또는 ID를 입력 할 수 있습니다. 각 패널에는 데이터를 승인하고 필드를 지우고 포커스를 다시 설정하는 제출 버튼이 있습니다. 각 패널에는 수표 입력 방법이 있습니다. Id는 정수입니다. 대학 또는 학생 데이터는 각 해당 arraylist에 배치됩니다.

나는 이것을 기반으로 한 실례를 가지고 있으며, 내가 잘못한 곳을 알아낼 수 없다. 학생과 대학을 클릭하면 패널이 열리지 않습니다.

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

public class Question4 extends JFrame 
{ 
    private JDesktopPane theDesktop; 
    ArrayList<Student> studentList = new ArrayList<Student>(); 
    ArrayList<University> universityList = new ArrayList<University>(); 

    public static void main(String args[]) 
    { 
     Question4 q4 = new Question4(); 
     q4.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     q4.setSize(400,400); 
     q4.setLocationRelativeTo(null); 
     q4.setVisible(true); 
    } 

    public Question4() 
    { 
     super("Question 4"); 
     theDesktop = new JDesktopPane(); 
     JMenuBar bar = new JMenuBar(); 
     JMenu menu = new JMenu("Menu"); 
     JMenuItem studentItem = new JMenuItem("Student"); 
     JMenuItem universityItem = new JMenuItem("University"); 
     JMenuItem exitItem = new JMenuItem("Exit"); 

     exitItem.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       System.exit(0); 
      } 
     }); 

     studentItem.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       JInternalFrame sFrame = new JInternalFrame("Student",true,true,true); 
       AddStudentPanel sPanel = new AddStudentPanel(); 
       sFrame.add(sPanel); 
       sFrame.pack(); 
       theDesktop.add(sFrame); 
       sFrame.setVisible(true);   
      } 
     }); 

     universityItem.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       JInternalFrame uFrame = new JInternalFrame("University",true,true,true);  
       AddUniversityPanel uPanel = new AddUniversityPanel(); 
       uFrame.add(uPanel); 
       uFrame.pack(); 
       theDesktop.add(uFrame); 
       uFrame.setVisible(true);   
      } 
     }); 

     menu.add(studentItem); 
     menu.add(universityItem); 
     menu.add(exitItem); 

     bar.add(menu); 

     setJMenuBar(bar); 
     add(theDesktop); 
    } 

    private class AddStudentPanel extends JPanel 
    { 
     private JLabel nameLabel; 
     private JLabel idLabel; 
     private JLabel submitLabel; 
     private JTextField nameField; 
     private JTextField idField; 
     private JButton submitButton; 

     public AddStudentPanel() 
     { 
      setLayout(new GridLayout (3,2)); 

      nameLabel = new JLabel("Enter Name"); 
      idLabel = new JLabel("Enter ID"); 
      submitLabel = new JLabel("Submit"); 

      nameField = new JTextField(15); 
      idField = new JTextField(15); 

      StudentHandler sHandler = new StudentHandler(); 
      submitButton.addActionListener(sHandler); 

      add(nameLabel); 
      add(nameField); 
      add(idLabel); 
      add(idField); 
      add(submitLabel); 
      add(submitButton); 
     } 

     class StudentHandler implements ActionListener 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 

       if(ae.getSource() == submitButton) 
       { 
        if(checkStudentInput()) 
        { 

         studentList.add(new Student(nameField.getText(),Integer.parseInt(idField.getText()))); 
         nameField.setText(""); 
         idField.setText(""); 
         nameField.requestFocus(); 
        } 
       } 
      } 

      public boolean checkStudentInput() 
      { 
       boolean input = true; 

       if(nameField.getText().isEmpty()) 
       { 
        JOptionPane.showMessageDialog(null,"Please enter a name"); 
        nameField.requestFocus(); 
        input = false; 
       } 
       else if(idField.getText().isEmpty()) 
       { 
        JOptionPane.showMessageDialog(null,"Please enter an id"); 
        idField.requestFocus(); 
        input = false; 
       } 
       else 
       { 
        try 
        { 
         Integer.parseInt(idField.getText()); 
        }catch(NumberFormatException nfe) 
        { 
         JOptionPane.showMessageDialog(null,"Please enter an integer for id"); 
         idField.setText(""); 
         idField.requestFocus(); 
         input = false; 
        } 
       } 

       return input; 
      } 
     } 
    } 

    private class AddUniversityPanel extends JPanel 
    { 
     private JLabel nameLabel; 
     private JLabel codeLabel; 
     private JLabel submitLabel; 
     private JTextField nameField; 
     private JTextField codeField; 
     private JButton submitButton; 

     public AddUniversityPanel() 
     { 
      setLayout(new GridLayout (3,2)); 

      nameLabel = new JLabel("Enter Name"); 
      codeLabel = new JLabel("Enter State Code"); 
      submitLabel = new JLabel("Submit"); 

      nameField = new JTextField(15); 
      codeField = new JTextField(15); 

      UniversityHandler uHandler = new UniversityHandler(); 
      submitButton.addActionListener(uHandler); 

      add(nameLabel); 
      add(nameField); 
      add(codeLabel); 
      add(codeField); 
      add(submitLabel); 
      add(submitButton); 
     } 

     class UniversityHandler implements ActionListener 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 

       if(ae.getSource() == submitButton) 
       { 
        if(checkUniversityInput()) 
        { 

         universityList.add(new University(nameField.getText(),Integer.parseInt(codeField.getText()))); 
         nameField.setText(""); 
         codeField.setText(""); 
         nameField.requestFocus(); 
        } 
       } 
      } 


      public boolean checkUniversityInput() 
      { 
       boolean input = true; 

       if(nameField.getText().isEmpty()) 
       { 
        JOptionPane.showMessageDialog(null,"Please enter a name"); 
        nameField.requestFocus(); 
        input = false; 
       } 
       else if(codeField.getText().isEmpty()) 
       { 
        JOptionPane.showMessageDialog(null,"Please enter an State Code"); 
        codeField.requestFocus(); 
        input = false; 
       } 
       else 
       { 
        try 
        { 
         Integer.parseInt(codeField.getText()); 
        }catch(NumberFormatException nfe) 
        { 
         JOptionPane.showMessageDialog(null,"Please enter an integer for State Code"); 
         codeField.setText(""); 
         codeField.requestFocus(); 
         input = false; 
        } 
       } 

       return input; 
      } 
     } 
    } 
} 

답변

2

변경

setContentPane(theDesktop); 

에 선

add(theDesktop); 

당신은 계속 할 수 있어야한다.

NullPointerException을 피하려면 AddStudentPanelAddUniversityPanelsubmitButton도 초기화해야합니다.

submitButton = new JButton() 

귀하의 과제를 완료하는 데 도움이 되길 바랍니다.

+0

제출 버튼이 문제였습니다. 초기화 버튼을 간과했다고 생각할 수 없습니다. 두 번째 눈이 필요했습니다. 감사합니다. –

+0

당신을 진심으로 환영합니다. 나는 당신이'setContentPane'을 사용해야한다고 생각했지만, 분명히'add'도 잘 동작합니다. :) – Steinar