无法在对象的变量上设置值

时间:2015-07-22 17:52:04

标签: java swing user-interface

我想要做的是从4个文本字段的窗口获取患者身份,姓名,年龄,疾病,然后使用患者使用id搜索患者详细信息。我完成了整个任务但是值无法保存在对象的变量上我没有收到任何错误。请各位帮帮我错误。谢谢 这是我的代码:

/ *  *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。  *要更改此模板文件,请选择“工具”|模板  *并在编辑器中打开模板。  * /

package hospital.management;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import sun.security.pkcs11.wrapper.Constants;

public class HospitalManagement {

    public  static void main(String[] args) {


        new Run().setVisible(true);



    } 

}

class patient{
    private

            String name,disease ;
                  int P_id,P_age;  

    public

                void get_name(String n){
                    name=n;
                }   

                void get_id(int id){
                    P_id=id;
                }
                void get_disease(String n){
                    disease=n;
                }   
                void get_age(int age1){
                    P_age=age1;
                }

            String show_name(){
                    return name;
            }
             int show_id(){
                    return P_id;
            }
             String show_disease(){
                    return disease;
            }
           int show_age(){
                    return P_age;
            }


}

class Run extends JFrame{

    JFrame frame=new JFrame();
    patient[] p1 = new patient[5];     
patient patient = new patient();               
         int cout=0;

 public Run(){


frame.setTitle("Patient Window");
frame.setSize(700,300);
frame.setLocation(100,250);

frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER,15,15));

 final JTextField jid = new JTextField(20);
  final JTextField jage = new JTextField(20);
  final JTextField jname = new JTextField(20);
   final JTextField jdisease = new JTextField(20);
 final JTextField jsid = new JTextField(20);

  final JTextArea textArea= new JTextArea();
    textArea.setEditable(false);


    JLabel lbl_name=new JLabel("Name:");
    JLabel lbl_id=new JLabel("ID: ");
    JLabel lbl_age=new JLabel("Age: ");
    JLabel lbl_disease=new JLabel("Disease: ");
    JLabel lbl_sid=new JLabel("Search ID: ");


    JButton submit = new JButton("Submit");
    JButton search = new JButton("Search");



    submit.addActionListener(new ActionListener() {


          @Override
         public void actionPerformed(ActionEvent ev) {



           int   id,age;
     id = Integer.parseInt(jid.getText());
           patient.get_id(id);
String name= jname.getText();
            patient.get_name(name);
        age=Integer.parseInt(jage.getText());
              patient.get_age(age);
String disease=jdisease.getText();
                patient.get_disease(disease);



 } 
 });


    p1[cout]=patient;
    cout++;
    //a.c++;

    search.addActionListener(new ActionListener() {
            @Override
        public void actionPerformed(ActionEvent ev) {

            int  srch_id  = Integer.parseInt(jsid.getText());


    for(int i=0 ;i<2 ;i++){
      if(p1[i].show_id()==srch_id){
            textArea.append("ID: " +p1[i].show_id()+"    Name: "+p1[i].show_name()+"    Age: "+p1[i].show_age()+"    Disease: "+p1[i].show_disease()+Constants.NEWLINE);
               }

 }

 }
 });
  //textArea.append("ID: " +p1[cout].show_id()+"    Name: "+p1[cout].show_name()+"    Age: "+p1[cout].show_age()+"    Disease: "+p1[cout].show_disease());
 frame.add(lbl_id);    
frame.add(jid);
frame.add(lbl_name);
frame.add(jname);
frame.add(lbl_age);
frame.add(jage);

frame.add(lbl_disease);
frame.add(jdisease);

frame.add(submit);

frame.add(lbl_sid);
frame.add(jsid);
frame.add(search);
frame.add(textArea);
frame.pack();
frame.setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
 setLocationRelativeTo(null);


         }

}

1 个答案:

答案 0 :(得分:0)

1)错误在这里: 通过这个

patient[] p1 = new patient[5];   

您只创建一个包含空值的数组。

这里:

submit.addActionListener(new ActionListener() {
 ....
p1[cout].get_id(id);

您尝试从数组元素调用 get_id ,当前 null

我建议你做以下事情: 1)在actionPerformed方法

patient patient = new patient() // Classes should start with UpperCase letter

p1[cout] = patient;

2)在您的示例中,最好将Array替换为List

3)似乎你使用的是getter而不是setter;)

4)我建议重构此代码段