[Megoldva:] Új sor beszúrása JTable objektumba?

Fórumok

Sziasztok!

Egy JTable obkjektum esetén szeretném megoldani, hogy a felhasználó egy új sort szúrhasson a táblázatba, ha akar. Az esemény kiváltásának lehetősége és lekezelése nem gond. Csak a tényleges futásidejű beszúrásra nem találok lehetőséget.

Néztem, hogy a JTable-nek van egy olyan tagfüggvénye, hogy setDropMode() és ott be lehet állítani a DropMode-t INSERT_ROWS -ra. Tehát nagy valószínűséggel meg lehet oldani az új sor beszúrását.

Van valaki, aki tudja közületek a megoldást? Előre is kösz!

Hozzászólások

pl.: DefaultTableModel.addRow(Vector rowData) ?
Kicsit bővebben: vagy csinálsz saját TableModel-t, vagy a DefaultTableModelt használva annak van addRow metódusa.

és kicsit magyarázva is:
A JTable csak a táblázat megjelenítésére szolgál (MVC ha úgy tetszik), a táblázat adatait a TableModel tartalmazza. Tehát ha módosítani akarsz az adatokon, akkor gyk. a TableModel-t kell piszkálnod.

Van már egy kis remény! Köszönöm. Csakhogy....

Sikerült létrehoznom a TableModelt valahogy így:


        dataModel = new DefaultTableModel() {
            public int getColumnCount() { return 5; }
            public int getRowCount() { return 5;}
            public Object getValueAt(int row, int col) { return data[row][col]; }
            public String getColumnName(int col) { return columnNames[col]; } 
        };
        table = new JTable(dataModel);

Szépen létre is hozza a táblázatot, ahogy kell. Csakhogy az addRow() függvény használatánál indextúlcsordulási hibával leáll. (ArrayIndexOutOfBoundsException)

Mit lehetne tenni? Valahol engedélyeznem kell a táblázat bővíthetőségét?

gondolom van valamilyen tablemodel-ed. Belerakod a modelbe. Ha mondjuk AbstractTableModel vagy hasonló, akkor pl. a fireTableRowsInserted() -al tudsz küldeni egy eventet, hogy rajzolja újra. Fontos megérteni, hogy ez csak a rajzolásra vonatkozik, a tényleges tartalom a modelben van..

Sikerült megoldani a problémát.

Ha nem a fenti módszerrel készítem el a DataModelt, hanem egyszerűen egy sima new eljárással, akkor simán működik.


        dataModel = new DefaultTableModel();
        for (int col = 0; col < columnNames.length; col++) {
            dataModel.addColumn(columnNames[col]);
        }
        for (int row = 0; row < columnNames.length; row++) {
            dataModel.addRow(data[row]);
        }
        
        table = new JTable(dataModel);

Valószínűleg az előbb fixen megadtam a sorok számát, és akkor már nem lehet módosítani rajta. Ezzel a megadással pedig annyiszor szúrok be új sort vagy új oszlopot, ahányszor csak akarok.

Nagyon szépen köszönöm mindkét hozzászólónak a segítséget! Nélkületek nem ment volna.