Java 从不同的组件获取信息

Java 从不同的组件获取信息,java,swing,Java,Swing,我有一个主要是调查的GUI,当调查完成时,信息将被提取到一个表中,我目前无法获取所有信息,我创建了一个名为finish handler的Actionlistener,它连接到调查GUI按钮“finished”因此,当单击finish按钮时,它将提取所有信息并将其存储到我的DataStorage类中。下面是我的survey GUI、actionListener类和DataStorage类 /*********frame3 Survey*********/ frame3 = new JFram

我有一个主要是调查的GUI,当调查完成时,信息将被提取到一个表中,我目前无法获取所有信息,我创建了一个名为finish handler的Actionlistener,它连接到调查GUI按钮“finished”因此,当单击finish按钮时,它将提取所有信息并将其存储到我的DataStorage类中。下面是我的survey GUI、actionListener类和DataStorage类

/*********frame3 Survey*********/
   frame3 = new JFrame();
   frame3.setTitle("Student Survey");
   frame3.setLayout(new MigLayout());
   frame3.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
   btnFinish = new JButton("Finish!");
   btnFinish.addActionListener(new FinishHandler());
   pSSFinish = new JPanel();
   pSSFinish.add(btnFinish);
   String[] levelStrings = { "1.1", "1.2", "2.1", "2.2", "3.1", "3.2" };
   String[] DipStrings = { "Info-Communications", "Computer Engineering", "Mechatronics", "Electronics"};   
   jcbDip = new JComboBox(DipStrings);
   jcbLvl = new JComboBox(levelStrings);
   jcbDip.addActionListener(new FinishHandler());
   jcbLvl.addActionListener(new FinishHandler());
   //pSSInfo
   pSSInfo = new JPanel();
   pSSInfo.setBorder(loweredetched);
   pSSInfo.setLayout(new MigLayout());
   lblSSTitleName = new JLabel("Name:");
   lblSSTitleID = new JLabel("Student ID:");
   lblSSName = new JLabel("");
   lblSSID = new JLabel("");
   pSSInfo.add(lblSSTitleName);
   pSSInfo.add(lblSSName,"wrap");
   pSSInfo.add(lblSSTitleID);
   pSSInfo.add(lblSSID);

   //pSSCourse
   pSSCourse = new JPanel();
   pSSCourse.setBorder(titleCourse);
   pSSCourse.setLayout(new MigLayout());
   lblSSCourseDip = new JLabel("Diploma:");
   lblSSCourseLvl = new JLabel("Level:");
   lblSSCourseCre = new JLabel("No of credits:");
   txfSSCourse = new JTextField(8);
   pSSCourse.add(lblSSCourseDip);
   pSSCourse.add(jcbLvl,"wrap");
   pSSCourse.add(lblSSCourseLvl);
   pSSCourse.add(jcbDip,"wrap");
   pSSCourse.add(lblSSCourseCre);
   pSSCourse.add(txfSSCourse);

   //pSSAge
   pSSAge = new JPanel();
   pSSAge.setBorder(raisedbevel);
   lblSSAge = new JLabel("Age");
   txfSSAge = new JTextField(8);
   pSSAge.add(lblSSAge);
   pSSAge.add(txfSSAge);
   //pSSGender
   String male = "Male";
   String female = "Female";
   btnMale = new JRadioButton(male);
   btnMale.addActionListener(new FinishHandler());
   btnFemale = new JRadioButton(female);
   btnFemale.addActionListener((new FinishHandler()));
   ButtonGroup group = new ButtonGroup();
   group.add(btnMale);
   group.add(btnFemale);
   pSSGender = new JPanel();
   pSSGender.setBorder(titleGender);
   pSSGender.setLayout(new MigLayout());
   pSSGender.add(btnMale,"wrap");
   pSSGender.add(btnFemale);
   //pSSMisc
   pSSMisc = new JPanel();
   pSSMisc.setBorder(titleMisc);
   pSSMisc.setLayout(new MigLayout());
   cbMiscPt = new JCheckBox("Working Part Time");
   cbMiscPt.addItemListener(new FinishHandler());
   cbMiscPc = new JCheckBox("Have own PC/NoteBook");
   cbMiscPc.addItemListener(new FinishHandler());
   cbMiscChild = new JCheckBox("Have children");
   cbMiscChild.addItemListener(new FinishHandler());
   pSSMisc.add(cbMiscPt,"wrap");
   pSSMisc.add(cbMiscPc,"wrap");
   pSSMisc.add(cbMiscChild);

   frame3.add(pSSFinish,"dock south");
   frame3.add(pSSInfo,"dock north");
   frame3.add(pSSCourse,"dock west");
   frame3.add(pSSAge,"wrap, grow");
   frame3.add(pSSGender);
   frame3.add(pSSMisc,"dock east");

   frame3.pack();
   frame3.setVisible(false);
/完成处理程序/

class FinishHandler implements ActionListener, ItemListener
  {
   public void actionPerformed(ActionEvent e)
   { //System.out.println("current login in student is: "+ds.getStudent(currentUser).getUser());
    ds.getStudent(currentUser).setDiploma((String)jcbDip.getSelectedItem());
    System.out.println(ds.getStudent(currentUser).getDiploma());//debug
    ds.getStudent(currentUser).setLevel((String)jcbLvl.getSelectedItem());
    System.out.println(ds.getStudent(currentUser).getLevel());//debug
    ds.getStudent(currentUser).setCredits(txfSSCourse.getText());
    System.out.println(ds.getStudent(currentUser).getCredits());//debug
    ds.getStudent(currentUser).setAge(txfSSAge.getText());
    System.out.println(ds.getStudent(currentUser).getAge());
    if(btnMale.getText().equals("Male"))
    {
     ds.getStudent(currentUser).setGender("Male");
     System.out.println(ds.getStudent(currentUser).getGender());//debug
    }

    else if(btnFemale.getText().equals("Female"))
    {
     ds.getStudent(currentUser).setGender("Female");
     System.out.println(ds.getStudent(currentUser).getGender());//debug
    }
    if(btnMale.getText().equals(""))
    {
     ds.getStudent(currentUser).setGender("Did not set");
     System.out.println(ds.getStudent(currentUser).getGender());//debug
    }
    } 

     public void itemStateChanged(ItemEvent e) 
     {

        Object source = e.getItemSelectable();

         if (source == cbMiscPt) 
         {
          ds.getStudent(currentUser).setPartTime(true);
          System.out.println(ds.getStudent(currentUser).getPartTime());//debug

         } 
          else if (source == cbMiscPc) 
         {
             ds.getStudent(currentUser).setHavePc(true);
             System.out.println(ds.getStudent(currentUser).getHavePc());//debug
         } 
          else if (source == cbMiscChild) 
         {
             ds.getStudent(currentUser).setHaveChild(true);
             System.out.println(ds.getStudent(currentUser).getHaveChild());//debug
         }

        if (e.getStateChange() == ItemEvent.DESELECTED)
        {
         if (source == cbMiscPt) 
         {
          ds.getStudent(currentUser).setPartTime(false);
          System.out.println(ds.getStudent(currentUser).getPartTime());//debug

         } 
          else if (source == cbMiscPc) 
         {
             ds.getStudent(currentUser).setHavePc(false);
             System.out.println(ds.getStudent(currentUser).getHavePc());//debug
         } 
          else if (source == cbMiscChild) 
         {
             ds.getStudent(currentUser).setHaveChild(false);
             System.out.println(ds.getStudent(currentUser).getHaveChild());//debug
         }
        }

    } 


  }
/****数据存储类***/

import java.util.*;

public class DataStorage 
{
    HashMap<String, Student> students = new HashMap<String, Student>();  
    HashMap<String, Staff> staffMembers = new HashMap<String, Staff>();  
    //Default constructor
    public DataStorage(){
    }

    public void addStaffMember(Staff aAcc) 
    {
     staffMembers.put(aAcc.getUser(),aAcc);
    }

    public void addStudentMember(Student aAcc)
    {
     students.put(aAcc.getUser(),aAcc);
    }

   public Staff getStaffMember(String user)
   {
   return staffMembers.get(user);
   }

   public Student getStudent(String user)
   {
    return students.get(user);
   }

}
import java.util.*;
公共类数据存储
{
HashMap students=newhashmap();
HashMap staffMembers=新HashMap();
//默认构造函数
公共数据存储(){
}
公职人员(工作人员aAcc)
{
staffMembers.put(aAcc.getUser(),aAcc);
}
公共无效添加学生成员(学生aAcc)
{
put(aAcc.getUser(),aAcc);
}
公共人员getStaffMember(字符串用户)
{
返回staffMembers.get(用户);
}
公共学生getStudent(字符串用户)
{
返回学生。获取(用户);
}
}

您所追求的设计非常健谈。当您只需要将它设置为您的
btnFinish
时,您已经为每个小部件附加了一个新的
FinishHandler
。按照设置方式,对于GUI中的每次更改,您将更新
数据存储
对象。相反,只需将其添加到
btnFinish
,就可以减少处理程序被调用的次数,并简化处理过程。当然,您需要合并
itemStateChanged
actionPerformed
方法。当进入
actionPerformed
时,这将为您提供初始化
DataStorage
对象的选项,然后您可以启动持久化过程。在您研究将数据从内存移动到存储器时,请查看和了解相关概念

编辑:


通过“整合
itemStateChanged
actionPerformed
方法”,我的意思是将所有为复选框收集的数据移动到actionPerformed方法中。这样,当您单击finish(完成)按钮时,您可以收集
数据存储
对象所需的所有数据。

感谢您的回复,我不理解您所说的“合并itemStateChanged和actionPerformed方法”是什么意思我想我为每个小部件添加了一个新的FinishHandler,因为这样当进行更改(如将性别从男性更改为女性)时,它将重新登录,当按下Finish按钮时,所有内容都将使用相应的访问器方法存储到相应的数据存储中。我已删除小部件的处理程序,但没有删除JCheckbox的处理程序,因为我需要一个itemStateChanged事件来检查它是否被勾选或取消勾选,所以要求获取信息,这是正确的吗?一般提示:为什么你不与课程中的其他学生配对?结对编程的效果要好得多,然后试着自己去发现一切!java文档中的akf,为了监听复选框,我需要一个ItemListener,那么如何将其实现到ActionListener中呢?维哈根:因为我们仍然是学生,所以不成熟的冲突会发生。在我看来,你不需要倾听这些变化。当您填充
数据存储时,查询状态(即,
cbMiscPt.isSelected()
)会更容易。上面的gui包含一些JC组件,如文本字段、组合框和单选按钮,登录用户需要填写这些组件,在用户按下一个名为Finish的按钮并将其存储到登录的用户对象中之后,我一直在研究如何提取所有数据。我尝试向每个相应的小部件添加一个处理程序,因为如果我在调试它们时不这样做,那么在进行更改时,它们不会得到响应,比如从男性更改为女性。