Re: Problem with passing objects to button handling code...
Dave Reid <dreid@u.washington.edu> writes:
I'm a novice in the java world, so bear with me.
Here's my latest issue: I have an big array of Patient and Field data.
I have a GUI that I've built up, and lets the operator select a patient
to Archive (remove from the list). So I have a button on my gui that
says "Archive Patient". So I need to pass this huge array of stuff to
the code that runs from the button being pushed.
Here's what the button code looks like:
archiveButton.addActionListener(new PatArchiveHandler(activePatients));
And then the code for the PatArchiveHandler looks like this:
class PatArchiveHandler implements ActionListener
{
PatientRecord[] patientToArchive;
public void actionPerformed(ActionEvent e, PatientRecord[]
patActive)
{
patientToArchive = patActive;
//Figure out which is the selected patient
for (int i = 0; i <= (patToArchive.length - 1); i++)
{
if(patToArchive[i].patSelectedPatient == true)
{
int selectedIndex = i;
System.out.println("Selected patient found
at index " + selectedIndex);
}
}
patientToArchive[selectedIndex].markToArchive = true;
ArchiveAcknowledge aa = new ArchiveAcknowledge
(activePatients);
aa.setVisible(true);
System.out.println("Archive handler...");
}
}
And I get an error that says:
cannot find symbol
symbol: constructor PatArchiveHandle(PatientRecord[])
location: class PatArchiveHandler
archiveButton.addActionListerner(new PatArchiveHandle(activePatients));
Because you haven't created a constructor that takes this argument
list. You need to write such a constructor.
PatientSelect.java:203 PatArchiveHandler is not abstract and does not
override abstract method actionPerformed(java.awt.event.ActionEvent) in
java.awt.event.ActionLister
class PatArchiveHandler implements ActionListener
Because you haven't written the appropriate actionPerformed method, that
obeys the required signature. Adding extra arguments won't work,
because the Button doesn't know about your additional arguments.
But all is not lost, since if you properly write the constructor, you
could save the patient list in the instance variable and it would be
accessible in the method without the need to pass it in as an argument.
Anyone with any ideas? How does one go about passing objects (or arrays
of objects) to the code that gets fired by a button?
dave
You might also want to use a different method than linear search through
the array of patients to find the one to archive. Perhaps a HashSet or
something like that would be more appropriate. But that's an issue you
can worry about once you get the main code working.
--
Thomas A. Russ, USC/Information Sciences Institute