2010-02-13 121 views
0

我有一个GUI,主要是一项调查,当调查完成后,信息将被提取到一张表中,目前我无法获取所有信息,我创建了一个叫做完成处理程序的Actionlistener附加到调查GUI按钮“完成”,因此当完成按钮被点击时,它将提取所有信息并将其存储到我的DataStorage类中。以下是我的调查GUI,actionListener类和数据存储类。获取来自不同JComponents的信息

/*********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 
     } 
     } 

    } 


    } 

/**** DataSotrage类***/

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

} 
+4

问题是什么? – Jonas 2010-02-13 09:32:07

+0

上面的gui有Jcomponents像Textfields,comboxes radiobuttons,一个登录用户需要填写,我被困在如何提取所有数据后,用户按下一个名为Finish的按钮,并将它们存储到登录的用户对象我已尝试将Handler添加到每个相应的小部件,因为如果我不在调试它们时,它们在进行更改时不会得到响应,如从男性更改为女性。 – sutoL 2010-02-13 13:44:28

回答

1

你已经走了的设计非常健谈。您只需将其设置为btnFinish即可为每个小部件附加一个新的FinishHandler。您设置的方式,对于GUI中的每个更改,您都将更新您的DataStorage对象。相反,只需将其添加到btnFinish,就可以减少Handler被调用的次数,并且可以简化您的过程。当然,您将需要巩固您的itemStateChangedactionPerformed方法。这会让你在进入actionPerformed时初始化你的对象DataStorage,然后你可以启动你的持久化过程。当您将数据从内存移动到存储时,请看SwingWorker以及围绕concurrency in Swing的概念。

编辑:

通过“巩固您itemStateChangedactionPerformed方法,”我的意思是将所有的数据,你收集你的复选框到执行的操作方法。这样,当你点击完成按钮时,你可以收集你所需要的所有数据,你的DataStorage对象。

+0

感谢您的回复,我不明白你的意思是“巩固你的itemStateChanged和actionPerformed方法。” 我想我把一个新的FinishHandler到每个部件是因为这样,当一个变化像chaning性别从男性到女性它将regconise它,当完成按钮被按下时,所有存储到各自的DataStorage使用各自的访问器方法 – sutoL 2010-02-13 13:33:12

+0

我已经删除了小部件的处理程序,但不是为JCheckBoxes,因为我需要一个itemStateChanged事件来检查它是否打勾或未打勾,所以要求获取信息,这是正确的吗? – sutoL 2010-02-13 14:04:39

+0

一般提示:你为什么不配对你课程的其他学生?结对编程更好,然后试图找出你自己的一切! – Verhagen 2010-02-13 15:00:32