2010-02-13 8 views
0

설문 조사가 끝났을 때 설문 조사가 주로 GUI인데 정보가 표로 추출 될 때 현재 모든 정보를 가져 오는 데 문제가 있습니다. 완료 처리기라는 ActionListener를 생성했습니다. 설문 조사 GUI 버튼 "Finished"에 첨부되어 있으므로 Finish 버튼을 클릭하면 모든 정보가 추출되어 내 DataStorage 클래스에 저장됩니다. 아래는 내 survey GUI, actionListener 클래스 및 datastorage 클래스입니다.다른 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

+0

위의 gui는 Textfields와 같은 Jcomponents를 가지고 있습니다. 로그인 한 사용자가 채우기 위해 필요한 comboxes radiobuttons가 있습니다. 사용자가 Finish라는 버튼을 눌러 모든 데이터를 추출하는 방법에 집착하고 Logined User 객체에 저장합니다. 각각의 해당 위젯에 Handler를 추가합니다. 왜냐하면 만약 내가 디버깅 할 때, Male에서 Female으로 변경하는 것과 같이 변경이 이루어지면 응답을받지 못하기 때문입니다. – sutoL

답변

1

당신이 갔을 디자인은 매우 수다스러운입니다. btnFinish으로 설정하면 각 위젯에 새 FinishHandler을 첨부했습니다. 설정 한대로 GUI의 각 변경 사항에 대해 DataStorage 오브젝트를 갱신합니다. 대신, btnFinish에만 추가하여 처리기가 호출되는 시간을 줄이고 프로세스를 단순화 할 수 있습니다. 물론 itemStateChangedactionPerformed 방법을 통합해야합니다. 이렇게하면 actionPerformed에 들어갔을 때 DataStorage 개체를 초기화 할 수있는 옵션이 주어지며 그런 다음 지속성 프로세스를 시작할 수 있습니다. 데이터를 메모리에서 스토리지로 옮기는 방법에 대해서는 SwingWorkerconcurrency in Swing에 대한 개념을 살펴보십시오.

편집 :하여

'당신의 itemStateChangedactionPerformed 방법을 통합,'나는 작업 수행 방법으로 당신의 모든 데이터를 사용자의 체크 박스에 대한 수집을 이동 의미한다. 이렇게하면 완료 버튼을 클릭하면 DataStorage 개체에 필요한 모든 데이터를 수집 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. "itemStateChanged 및 actionPerformed 메서드를 통합"하는 것이 무슨 뜻인지 이해할 수 없습니다. 나는 각 위젯에 새로운 FinishHandler를 넣었다 고 생각한다. 왜냐하면 Male에서 female으로 chaning gender와 같은 변화가 생겼을 때 그것을 재구성 할 것이고 Finish 버튼이 눌려지면 모든 것은 각각의 접근 자 메소드를 사용하여 각각의 DataStorage에 저장되기 때문이다. – sutoL

+0

위젯에 대한 핸들러를 제거했지만 JCheckBoxes에 대한 핸들러를 제거하지 않았습니다. 이는 itemStateChanged 이벤트가 체크되었거나 체크되지 않았기 때문에 정보를 얻으라는 요청을 받았기 때문입니다. – sutoL

+0

일반적인 팁 : 왜 다른 학생들과 함께하지 않습니까? 쌍 프로그래밍은 훨씬 잘 작동하고, 모든 것을 스스로 찾으려고 노력합니다! – Verhagen