Java 从不同的组件获取信息
我有一个主要是调查的GUI,当调查完成时,信息将被提取到一个表中,我目前无法获取所有信息,我创建了一个名为finish handler的Actionlistener,它连接到调查GUI按钮“finished”因此,当单击finish按钮时,它将提取所有信息并将其存储到我的DataStorage类中。下面是我的survey GUI、actionListener类和DataStorage类Java 从不同的组件获取信息,java,swing,Java,Swing,我有一个主要是调查的GUI,当调查完成时,信息将被提取到一个表中,我目前无法获取所有信息,我创建了一个名为finish handler的Actionlistener,它连接到调查GUI按钮“finished”因此,当单击finish按钮时,它将提取所有信息并将其存储到我的DataStorage类中。下面是我的survey GUI、actionListener类和DataStorage类 /*********frame3 Survey*********/ frame3 = new JFram
/*********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
}
}
}
}
/****数据存储类***/
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);
}
}
import java.util.*;
公共类数据存储
{
HashMap students=newhashmap();
HashMap staffMembers=新HashMap();
//默认构造函数
公共数据存储(){
}
公职人员(工作人员aAcc)
{
staffMembers.put(aAcc.getUser(),aAcc);
}
公共无效添加学生成员(学生aAcc)
{
put(aAcc.getUser(),aAcc);
}
公共人员getStaffMember(字符串用户)
{
返回staffMembers.get(用户);
}
公共学生getStudent(字符串用户)
{
返回学生。获取(用户);
}
}
您所追求的设计非常健谈。当您只需要将它设置为您的btnFinish
时,您已经为每个小部件附加了一个新的FinishHandler
。按照设置方式,对于GUI中的每次更改,您将更新数据存储
对象。相反,只需将其添加到btnFinish
,就可以减少处理程序被调用的次数,并简化处理过程。当然,您需要合并itemStateChanged
和actionPerformed
方法。当进入actionPerformed
时,这将为您提供初始化DataStorage
对象的选项,然后您可以启动持久化过程。在您研究将数据从内存移动到存储器时,请查看和了解相关概念
编辑:
通过“整合
itemStateChanged
和actionPerformed
方法”,我的意思是将所有为复选框收集的数据移动到actionPerformed方法中。这样,当您单击finish(完成)按钮时,您可以收集数据存储
对象所需的所有数据。感谢您的回复,我不理解您所说的“合并itemStateChanged和actionPerformed方法”是什么意思我想我为每个小部件添加了一个新的FinishHandler,因为这样当进行更改(如将性别从男性更改为女性)时,它将重新登录,当按下Finish按钮时,所有内容都将使用相应的访问器方法存储到相应的数据存储中。我已删除小部件的处理程序,但没有删除JCheckbox的处理程序,因为我需要一个itemStateChanged事件来检查它是否被勾选或取消勾选,所以要求获取信息,这是正确的吗?一般提示:为什么你不与课程中的其他学生配对?结对编程的效果要好得多,然后试着自己去发现一切!java文档中的akf,为了监听复选框,我需要一个ItemListener,那么如何将其实现到ActionListener中呢?维哈根:因为我们仍然是学生,所以不成熟的冲突会发生。在我看来,你不需要倾听这些变化。当您填充数据存储时,查询状态(即,cbMiscPt.isSelected()
)会更容易。上面的gui包含一些JC组件,如文本字段、组合框和单选按钮,登录用户需要填写这些组件,在用户按下一个名为Finish的按钮并将其存储到登录的用户对象中之后,我一直在研究如何提取所有数据。我尝试向每个相应的小部件添加一个处理程序,因为如果我在调试它们时不这样做,那么在进行更改时,它们不会得到响应,比如从男性更改为女性。