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!
- 1895 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
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..
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni