Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ubacivanje podataka u JTable

[es] :: Java :: ubacivanje podataka u JTable

[ Pregleda: 2735 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ZeRo8
Wien

Član broj: 168
Poruke: 235
*.13.14.vie.surfer.at.



Profil

icon ubacivanje podataka u JTable25.03.2006. u 10:04 - pre 220 meseci
Jasno mi je da postoje dva nacina popunjavanja table JTable(Object[][] data, String[] columns) i JTable(Vector, Vector).

Ja sam se odlucio za ovaj prvi.

Ovako stoje stvari:

-imam klasu MakeConnection koja ima medotu establish(), disconnect().
-imam klasu koja je napravljena po principu sunovog MyTableModel u kojoj se nalazi Object[][] data = { {}, {}, {} ....}, naravno s podacima unutra.

Podatke s baze pokupljam preko ResultSeta metodom GetUsers() u MakeConnection.

E sad mi nije jasno kako napravim sledece. Da podaci koje pokupim ResultSetom ubacim u Object[][].

imam recimo Object[][] data, i kad ukucam data[1][1] = new Integer(1), on mi javlja NullPointerException.

evo i koda:
Ovo je u MakeConnection klasi
Code:

public Object[][] getUsers() {
        
        String query = "SELECT * FROM Users";
        int z = 0;
        Object[][] data = null;
        
        try {
            
            rs = stmt.executeQuery(query);
            
            while (rs.next()) {
                int a = rs.getInt("member_id");
                String b = rs.getString("firstname");
                String c = rs.getString("lastname");
                String d = rs.getString("birthday");
                String e = rs.getString("gender");
                String f = rs.getString("street");
                String g = rs.getString("town");
                String h = rs.getString("state");
                String i = rs.getString("email");
                String j = rs.getString("mobile_phone");
                String k = rs.getString("home_phone");
                String l = rs.getString("has_payed");
                String m = rs.getString("date_added");
                data[z][0]= new Integer(a);
                data[z][1]= new String(b);
                data[z][2]= new String(c);
                
                z++;
                }
            
            
        }catch (SQLException e){
            
            System.out.println("FEHLER" + e);
            
        }
        
        
        
        return data;
        
    }


Ovo je u MyUserTableModel klasi
Code:

class MyUsersTableModel extends AbstractTableModel  {
    
    private boolean DEBUG = false;
    
    
    
    
    private String []columnNames = {"Member ID",
                                "First Name",
                                "Last Name",
                                "Birthday",
                                "Gender",
                                "Street",
                                "Town",
                                "State",
                                "Email",
                                "Mobile Phone",
                                "Home Phone",
                                "Has payed",
                                "Date added"};
    
    
    Object[][] data = getData();
    
    
        public Object[][] getData() {
            
            MakeConnection con = new MakeConnection();
            con.establish();
            
            return con.getUsers();
        }
        
        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

        /*
         * JTable uses this method to determine the default renderer/
         * editor for each cell.  If we didn't implement this method,
         * then the last column would contain text ("true"/"false"),
         * rather than a check box.
         */
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }

        /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 1) {
                return false;
            } else {
                return true;
            }
        }

        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */
        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }

            data[row][col] = value;
            fireTableCellUpdated(row, col);

            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }

 
Odgovor na temu

logotet
Beograd

Član broj: 49849
Poruke: 42
..taman-bg.customer.sbb.co.yu.

Sajt: www.logotet.com


Profil

icon Re: ubacivanje podataka u JTable25.03.2006. u 10:24 - pre 220 meseci
Koliko vidim problem ti je u
Citat:

Object[][] data = null;

deklarises niz, a posle ga ni inicijalizujes. Trebalo bi da imas nesto poput
Code:

Object[][] data = new Object[X][Y];

Generalno, kada radis sa nizovima problem je sto moras odmah da znas dimenziju(e), dok sa Vector-ima ne moras.
To je ovde uzrok greske koju si javio.

Drugo, radi preciznosti, ne radi JTable sa Object[][] ili sa Vector. JTable UVEK radi sa TableModel samo sto su konstruktori koje si ti naveo tu radi lakseg koriscenja tabela za jednostavnije stvari. Tvoja TableModel klasa moze da bude kakvu god da je osmislis, vazno je samo da implementira trazene metode.
Kada vec imas TableModel , onda odaberi nacin koji tebi najvise odgovara(nizovi, vectori, hashtabele ...), nemoj da te ogranicavaju predefinisiani konstruktori. Bukvalno, mozes da kombinujes npr. niz za header, a Vector za podatke i sl.
 
Odgovor na temu

ZeRo8
Wien

Član broj: 168
Poruke: 235
*.13.14.vie.surfer.at.



Profil

icon Re: ubacivanje podataka u JTable25.03.2006. u 10:36 - pre 220 meseci
Hvala na odgovoru, orientisacu se na vektor
pozdrav
 
Odgovor na temu

ZeRo8
Wien

Član broj: 168
Poruke: 235
*.13.14.vie.surfer.at.



Profil

icon Re: ubacivanje podataka u JTable25.03.2006. u 10:43 - pre 220 meseci
Jos jedna stvar samo.


Jasno mi je da moram da napravim Vektor u Vektoru.
imam ovako:

Code:

public Vector getUsers() {
        
        
        String query = "SELECT * FROM Users";
        Vector row = new Vector();
        Vector data = new Vector();
        
        try {
            
            rs = stmt.executeQuery(query);
            
            
            while (rs.next()) {
                
                     int a = rs.getInt("member_id");
                      String b = rs.getString("firstname");
                    String c = rs.getString("lastname");
                    String d = rs.getString("birthday");
                    String e = rs.getString("gender");
                    String f = rs.getString("street");
                    String g = rs.getString("town");
                    String h = rs.getString("state");
                    String i = rs.getString("email");
                    String j = rs.getString("mobile_phone");
                    String k = rs.getString("home_phone");
                    String l = rs.getString("has_payed");
                    String m = rs.getString("date_added");
                    
                    row.setElementAt(new Integer(a),0);
                    row.setElementAt(b, 1);
                    row.setElementAt(c, 2);
                    row.setElementAt(d, 3);
                    row.setElementAt(e, 4);
                    row.setElementAt(f, 5);
                    row.setElementAt(g, 6);
                    row.setElementAt(h, 7);
                    row.setElementAt(i, 8);
                    row.setElementAt(j, 9);
                    row.setElementAt(k, 10);
                    row.setElementAt(l, 11);
                    row.setElementAt(m, 12);
                    
                    data.addElement(row);
                
            }
        } catch (Exception eee) {
            System.out.println("ERROR: " + eee);
        }
        
        for (Enumeration el=data.elements(); el.hasMoreElements(); ) {
                  System.out.println((String)el.nextElement());
                }
        
        return (Vector)data;
        
    }


Kako da sad to implementiram u MyUsersTableModel u ovim metodama?

Code:

public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }

            data[row][col] = value;
            fireTableCellUpdated(row, col);

            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }


[Ovu poruku je menjao ZeRo8 dana 25.03.2006. u 12:22 GMT+1]

[Ovu poruku je menjao ZeRo8 dana 25.03.2006. u 12:23 GMT+1]
 
Odgovor na temu

logotet
Beograd

Član broj: 49849
Poruke: 42
..taman-bg.customer.sbb.co.yu.

Sajt: www.logotet.com


Profil

icon Re: ubacivanje podataka u JTable25.03.2006. u 12:36 - pre 220 meseci
Ovde imas kolekciju zgodnih primera za rad sa JTable
 
Odgovor na temu

ZeRo8
Wien

Član broj: 168
Poruke: 235
*.13.14.vie.surfer.at.



Profil

icon Re: ubacivanje podataka u JTable25.03.2006. u 16:51 - pre 220 meseci
Da ima zgodnih primer, hvala u svakom slucaju, ali je u pitanju rad s bazom i vektorima.
Dobar link u svakom slucaju.
 
Odgovor na temu

rj444
Radomir Jakovljevic
Beograd

Član broj: 48212
Poruke: 354
*.rcub.bg.ac.yu.



Profil

icon Re: ubacivanje podataka u JTable27.03.2006. u 01:01 - pre 220 meseci
Mnogo ces pomoci sebi ako naucis da kreiras svoj TableModel, a ne da koristis Object[][] ili nekakve vektore.
Vektor mozes da koristis eventualno kao strukturu podataka u kojoj se cuvaju sami podaci koje zelis da prikazes
u vidu tabele. Ta struktura se nalazi kao atribut u klasi TableModel:

Evo primer jednog koda:
Code:

public class Model extends AbstractTableModel {

        //Ovde se cuvaju podaci
        private ArrayList datalist=new ArrayList();

        //zaglavlje tabele
        private static final String[] zaglavlje=

    {
        "ID",
        "Ime",
        "Prezime"
    };

        //kreiras na osnovu liste koju si napunio podacima iz baze
    public Model(ArrayList list) {
        super();
        datalist=list;
    }

        //prazna tabela
    public Model() {
        super();
        datalist=new ArrayList();
    }

        //ovo je metoda koja mora da se impl.
    public int getRowCount() { return datalist.size(); }

        //kao i ova
    public int getColumnCount() { return zaglavlje.length; }

        //i ova...
    public Object getValueAt(int row, int col) {
            //kod kojim na osnovu sadrzaja datalist odredjujes sta se pojavljuje u celiji [row,col] tabele
        }

        //i ova...
    public String getColumnName(int col) {
        return zaglavlje[col];
    }

        //mozes dodavati tvoje metode za ubacivanje novih ili izmenu/brisanje postojecih podataka

}


Da napomenem, u datalist bi bilo dobro da ubacujes neke svoje objekte, npr. Radnik(int ID, String ime, String prezime), koji reprezentuju situaciju u bazi.

Nadam se da sam pomogao.
Pozdrav.

[Ovu poruku je menjao rj444 dana 27.03.2006. u 02:04 GMT+1]
 
Odgovor na temu

[es] :: Java :: ubacivanje podataka u JTable

[ Pregleda: 2735 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.