31. maj 2007 - 22:34Der er
13 kommentarer og 1 løsning
Hashmap til JTable/TableModel?
Jeg har et problem ang mit hashmap der skal sendes videre over i min jtable, som tablemodel jo styrer. Jeg bruger primært hashmap fordi at jeg definerer et id/key, som skal bruges meget i klassen.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jamen et hashmap indeholder (key, object), og da jeg fra min database f.eks. har tilføjet hashmap der har id 51, 55, 60, 89 med tilhørende objekter. og tabelen tager fra row 0 og ikke 51.. derfor giver det en fejl: print donation id 52 bloodtype 0+ percentage 9.73 date 2007-05-30 15:19:02.347 request true
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at bloodproject.model.TableModelDonation.getValueAt(TableModelDonation.java:23)
Nåh... Ja, det kan du selvfølgelig ikke. Du skal på en måde have lavet det om så du kan hente på indeks i din hashmap.
Nu ved jeg ikke hvad der sker inde i din donationActions, men du kan lave dit hashmap om på følgende måde:
java.util.HashMap<int, DonationLine> map = new java.util.HashMap<int, DonationLine>(); java.util.List<DonationLine> list = new java.util.ArrayList<DonationLine>(map.values()); DonationLine donationLine = list.get (index); // Her henter du så kolonne nummeret...
public class DonationActions { private HashMap<Integer, DonationLine> donations; private List<DonationLine> list; private TableModelDonation tableModel; private DBSQL dbsql;
public DonationActions() { this.dbsql = new DBSQL(); donations = new HashMap<Integer, DonationLine>(); list = new ArrayList<DonationLine>(this.donations.values()); tableModel = new TableModelDonation(this); }
public void addDonation(DonationLine dl) { donations.put(dl.getDonationID(), dl); }
public TableModelDonation getTableModelDonation() { return this.tableModel; }
public int getNumberOfRows() { return this.donations.size(); }
public DonationLine getDonationByIndex(int index) { return list.get(index); }
public DonationLine getDonation(int n) { return (DonationLine)donations.get(n); }
public HashMap<Integer, DonationLine> getDonations() { return this.donations; }
Meningen med det her er at jeg ud fra donationID fra DB udtrækket skal sammenligne om donationID allerede eksisterer i arrayet som jtable/tablemodel består af, da metoden (requestDonation) kan blive kaldt adskellige gange med samme resultSet. Det er så menignen at jeg vil sammeligne resultSet donationID´et med array donationID´et. Da det jo er samme resultSet, og det vil sige at hvis metoden bliver kaldt igen og igen, opstår der dublikationer, så derfor skal de nye "requests" kun tilføjes :) Her er et billede af gui hvis det kan hjælpe http://zerocontrol.dk/billeder/req.jpg
Her er den stored procedure jeg kalder hvis det kan hjælpe
ALTER PROCEDURE [dbo].[requestDonation] -- Parameters @hospitalID int, @bloodTypeID int, @amount int, @sameDelivery int
AS -- Local variables DECLARE @now dateTime DECLARE @later dateTime DECLARE @donationAmount int -- Init variables SET @now = GETDATE() SET @later = DATEADD(d , 2, GETDATE()) SET @donationAmount = (SELECT COUNT(donationID) FROM donation, donor WHERE donor.bloodTypeID = @bloodTypeID AND donation.cpr = donor.cpr AND request = 'false') IF(@amount <= @donationAmount) BEGIN IF(@sameDelivery = 0) BEGIN -- Make new delivery get id INSERT INTO delivery(orderDate, deliveryDate, hospitalID) VALUES (@now, @later, @hospitalID) DECLARE @deliveryID int SET @deliveryID = (SELECT MAX(deliveryID) FROM delivery) END ELSE IF(@sameDelivery = 1) BEGIN -- Make new delivery get id SET @deliveryID = (SELECT MAX(deliveryID) FROM delivery) END
-- Loop it trough DECLARE @count int SET @count = 0
WHILE @count < @amount BEGIN
DECLARE @donationID int
SET @donationID = ( SELECT TOP 1 donationID FROM donation, donor, bloodType, delivery WHERE donation.cpr = donor.cpr AND donor.bloodTypeID = @bloodTypeID AND bloodType.bloodTypeID = @bloodTypeID AND DATEDIFF(day, donation.date, GETDATE()) < 10 AND request = 'false' GROUP BY donationID)
UPDATE donation SET request = 1 WHERE donationID = @donationID INSERT INTO deliveryList (donationID, deliveryID) VALUES (@donationID, @deliveryID) SET @count = @count + 1 END -- Send back resultset with the SELECT donation.donationID, bloodType, bloodPercentage, date, request FROM donation, donor, bloodType, deliveryList WHERE deliveryList.deliveryID = @deliveryID AND deliveryList.donationID = donation.donationID AND donation.cpr = donor.cpr AND donor.bloodTypeID = bloodType.bloodTypeID AND donation.request = 'true' GROUP BY donation.donationID, bloodType, bloodPercentage, date, request ORDER BY donation.donationID DESC END
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.get(ArrayList.java:322) at bloodproject.model.DonationActions.getDonationByIndex(DonationActions.java:47) at bloodproject.model.TableModelDonation.getValueAt(TableModelDonation.java:23) kan det ikke have noget at gøre med at man loade ind values igen på list fra hash ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.