2010-02-13 4 views
0

J'ai une interface graphique qui est principalement un sondage, lorsque l'enquête est terminée l'information serait extrait à une table, j'ai actuellement du mal à obtenir toutes les informations, j'ai créé un Actionlistener appelé gestionnaire de finition qui est attaché au bouton de l'interface graphique de l'enquête "Terminé". Lorsque le bouton Terminer est cliqué, il extrait toutes les informations et les stocke dans ma classe DataStorage. Ci-dessous mon interface graphique d'enquête, la classe actionListener et la classe datastorage.obtenir des informations de différents 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); 

/finish/

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

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

Quelle est la question? – Jonas

+0

le gui ci-dessus a Jcomponents comme Textfields, comboxes radiobuttons qu'un utilisateur connecté doit remplir, je suis coincé sur la façon d'extraire toutes les données après que l'utilisateur a appuyé sur un bouton appelé Finish et les stocker dans l'objet utilisateur connecté j'ai essayé ajouter un gestionnaire à chacun des widgets correspondants, car si je ne le fais pas lorsque je les débogue, ils ne reçoivent pas de réponse quand un changement est fait, comme changer de mâle à femelle. – sutoL

Répondre

1

La conception que vous avez opté pour est très bavard. Vous avez joint un nouveau FinishHandler à chaque widget, quand vous avez seulement besoin de le régler à votre btnFinish. La façon dont vous l'avez défini, pour chaque changement dans l'interface graphique, vous allez mettre à jour votre objet DataStorage. Au lieu de cela, en l'ajoutant uniquement au btnFinish, vous pouvez réduire le nombre de fois que votre gestionnaire est appelé et simplifier votre processus. Bien sûr, vous devrez ensuite consolider vos méthodes itemStateChanged et actionPerformed. Cela vous donnera alors l'option d'initialiser votre objet DataStorage lorsque vous entrez dans actionPerformed, et vous pouvez ensuite initier votre processus de persistance. Regardez SwingWorker et les concepts autour de concurrency in Swing que vous cherchez à déplacer vos données de la mémoire vers le stockage.

EDIT:

Par «consolider vos méthodes itemStateChanged et actionPerformed, je veux dire déplacer vous tous la collecte de données pour vos cases à cocher dans l'action procédé mis en oeuvre. De cette façon, lorsque vous cliquez sur le bouton Terminer, vous pouvez rassembler toutes les données dont vous avez besoin pour votre objet DataStorage.

+0

merci pour la réponse, je ne comprends pas ce que vous entendez par "consolider vos méthodes itemStateChanged et actionPerformed." J'ai pensé que je mets un nouveau FinishHandler à chaque widget parce que si une modification est faite comme chanter genre de Male à femelle, il le regconise et quand le bouton Terminer est pressé tout est stocké dans le DataStorage respectif en utilisant la méthode d'accesseur respective – sutoL

+0

J'ai supprimé les gestionnaires pour les widgets, mais pas pour les JCheckBox, parce que j'ai besoin d'un événement itemStateChanged pour vérifier si oui ou non il est coché ou décoché donc demander d'obtenir l'information, est-ce correct? – sutoL

+0

Conseil général: Pourquoi ne vous jumelez-vous pas avec l'un des autres étudiants de votre cours? La programmation en binette fonctionne beaucoup mieux, puis essaie de tout trouver par vous-même! – Verhagen

Questions connexes