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.
Jeg bruger normalt en tabel som henter sine data fra en arraylist.. som du sikkert ved har sådan en ikke nogen fast størrelse så det er nemt blot at indsætte elementer i den inde i din while (rset.next()) løkke:)
det er sådan ca. jeg selv laver det, men sidder ikke lige ved min egen pc så kan ikke give dig et eksempel af mit eget desværre.. kan måske senere i aften, men ellers kan jeg sagtens hjælpe dig med at forstå mikkelbm's kode..
Nå så har jeg skrevet det om, så det er lavet ligesom mikkelbm's eksempel, og det er jo nok lidt smartere..
Så bare lige det sidste problem..
I min klasse hvor jeg henter mine data i databasen, der får jeg kolonnerne i hver række præsenteret i rset.getString(1),rset.getString(2),rset.getString(3),rset.getString(4)
Det er jo fint nok, men hvordan får jeg pakket dem pænt ind i en Arrarylist ? ,her skal der jo ikke en kolonne i hvert element, alle 4 kolonner hører jo sammen i en række..
Så hvad jeg egentlig gerne vil er at præsentere dem i min tabel som de ligger i databasen
Hvis nu bare det havde været 1 kolonne, så havde det været nemt, men nu er der jo lige 4.
Jeg tænkte på at ligge alle 4 kolonner ind i 1 streng, og så adskille dem med '-' og så efter jeg har retuneret dem, så adskille dem på - igen, men det er da for bøvlet
Hvis det er lavet efter mit eksempel, forventes der jo et objekt af din egen type.
Det vil sige at der hvor du henter data ud fra databasen bygger du et objekt ud fra disse oplysninger. Dette objekt kan du så putte i en ArrayList og returnere. Herefter kan du så tilføje hvert enkelt element til den TableModel som du har lavet.
Nu ved jeg ikke hvilke data det er du arbejder med, men i mit eksempel har jeg MyObject som indeholder et id og et navn. Dette kan du jo så udvide efter behov. Hvis det f.eks. er et person register du har i databasen, skal du lave et objekt der modsvarer dette. Det vil sige at dit objekt eksempelvis kan have: id, navn, efternavn, adresse, tlfnr osv... Dette objekt er så det du skal bygge din TableModel op efter.
Jeg er ked af at jeg skal have det skåret ud i pap, men jeg er gammel perl hacker der liger er gået på java bølgen, så OOP er rimelig nyt, men jeg kæmper :-)
nu har jeg i min database klasse bygget et object og lagt det ned i en ArrayList som jeg retunerer til min tabel model.. //////////// BYGGER OBJEKT List a = new ArrayList();
Det med objektet er rigtig nok. Din TableModel skal så afspejle det objekt, på den måde du gerne vil ha' det vist i din JTable. Din forløkke ser faktisk også rigtig nok ud:
Men for at ovenstående vil virke, kræver det, at du har lavet din TableModel rigtig. Hvis det ikke virker for dig, så prøv at smid koden til TableModel herind, så kan vi kigge på det.
Længere oppe har du et objekt: MyDbObject, men i din TableModel har du MyObject. Det er i hvert fald en fejl.
Og så mangler du også en add-metode, hvor du kan tilføje dine elementer.
Jeg tror den skal se sådan her ud:
private class MyTableModel extends AbstractTableModel { private String[] columns = new String[] {"Host", "PortNr","MaxAttUp","MaxAttDown"}; private ArrayList data;
public MyTableModel() { data = new ArrayList(); }
public int getColumnCount() { return columns.length; }
public int getRowCount() { return data.size(); }
public String getColumnName(int column) { return columns[column]; }
public MyDbObject getValueAt(int row) { return (MyDbObject)data.get(row); }
public Object getValueAt(int row, int column) { MyDbObject element = (MyDbObject) data.get(row);
switch (column) { case 0: return element.gethost(); case 1: return element.getport(); case 2: return element.getmaxattup(); case 3: return element.getmaxattdown(); } return null; }
public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); }
public boolean isCellEditable(int row, int column) { return true; // alle celler er editerbare }
public void setValueAt(Object value, int row, int column) { switch (column) { // case 0: ((MyDbObject) data.get(row)).setName(value.toString()); // Ovenstående skal du kun bruge, hvis du vil gøre det muligt at ændre objekterne værdier ved at indtaste i tabellen. // Hvis du vil det, skal du ha' en case for hver af dine setmetoder i dit objekt. } fireTableCellUpdated(row, column); }
public void addTableElement(MyDbObject element) { data.add(element); fireTableRowsInserted(data.size(), data.size()); }
public void removeTableElement(int index) { if (! (index == -1)) { data.remove(index); fireTableRowsDeleted(index, index); } }
public void removeAll() { int slut = data.size(); data.clear(); fireTableRowsDeleted(0, slut); } }
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.