2010-02-13 44 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