получать информацию от разных JComponents - PullRequest
0 голосов
/ 13 февраля 2010

У меня есть графический интерфейс, который в основном представляет собой опрос, когда опрос завершается, информация будет извлечена в таблицу, в настоящее время у меня возникают проблемы с получением всей информации, я создал Actionlistener, называемый обработчиком финиша, который прикреплен к опросу. Кнопка графического интерфейса пользователя «Завершено», поэтому при нажатии кнопки «Готово» она извлекает всю информацию и сохраняет ее в моем классе DataStorage. Ниже приведены мой графический интерфейс для опроса, класс actionListener и класс хранилища данных.

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

}

1 Ответ

1 голос
/ 13 февраля 2010

Дизайн, на который вы пошли, очень болтливый. Вы прикрепили новый FinishHandler к каждому виджету, когда вам нужно только установить его на btnFinish. То, как вы его установили, для каждого изменения в графическом интерфейсе вы будете обновлять ваш DataStorage объект. Вместо этого, просто добавив его в btnFinish, вы можете сократить количество вызовов вашего обработчика и упростить процесс. Конечно, вам нужно будет консолидировать свои itemStateChanged и actionPerformed методы. Это даст вам возможность инициализировать ваш DataStorage объект, когда вы войдете в actionPerformed, и вы сможете инициировать процесс сохранения. Посмотрите на SwingWorker и концепции параллелизма в Swing , когда вы смотрите на перемещение ваших данных из памяти в хранилище.

EDIT:

Под «консолидацией методов itemStateChanged и actionPerformed» я подразумеваю перенести сбор всех данных для ваших флажков в метод выполненных действий. Таким образом, когда вы нажимаете кнопку завершения, вы можете собрать все данные, которые вам нужны для вашего DataStorage объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...