To ale prijdu o metody addRow a removeRow. Navic DefaultTM je oddedeny
od AbstractTM, takze by to melo taky fungovat ne?
Tomas Zverina napsal(a):
Nebojte se ten vas model podedit z AbstractTableModel. A kdyz rikam
Abstract, nemyslim tim Default. Ten AbstractTM vam prave naimplementuje
podporu listeneru, zbytek metod modelu si nechte jak je mate.
Martin Jedlička píše v Út 20. 02. 2007 v 08:46 +0100:
Ted jsem udelal takovy pokus. Pridal jsem toto:
m_table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
if(e.getType() == TableModelEvent.UPDATE){
m_dm.fireTableChanged(e);
}
}
} );
pricemz : m_dm je ten model oddedeny od DefaultTableModel.
m_table je ta tabulka JTable
kdyz to ale spustim a udelam nejakou zmenu v tabulce, tak mi to vyhodi
vyjimku:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
prave na tom radku m_dm.fireTableChanged(e);
jde to vubec takto udelat? nebo co delam spatne?
Martin
Tomas Zverina napsal(a):
Ikonka se zmeni, pokud model tabulky vyvola udalost, ze se zmenil.
Samotne nacpani do vecotru stacit nebude, musite krome nacpani
informovat vsechny listenery toho modelu, ze jste neco zmenil.
Pokud jste dedil AbstractTableModel, poohlednete se v nem po fire*
metodach, jak uz psala Lucka.
Pokud jste ho nededil, pak jste nejspis osidil metody
addTableModelListener a removeTableModelListener a ted toho litujete :-)
Martin Jedlička píše v Po 19. 02. 2007 v 16:59 +0100:
Nekam ne to navedlo, ale bohuzel nevim, zda spravnym smerem.
Model tabulky mam vlastni (razeni) oddedeny od DefaultTableModel.
Kazdy radek vkladam jako vektor (resp. mam vlastni tridu oddedenou od
Vektoru). Potom mam pole techto vektoru reprezentujici ty radky.
Kdyz zmenim neco v jednom vektoru (napr. prvni element je cesta k
ikonce), tak potrebuju, aby se mi ta ikonka taky zmenila v tabulce...
M.
Lucie Rut Bittnerova napsal(a):
On Mon, 19 Feb 2007, Martin Jedlička wrote:
Zdravim,
potreboval bych v tabulce mit na kazdem radku ikonku, ktera by se dala
menit po kliknuti napr. nejakeho tlacitka. Myslel jsem, ze to vyresim
tak, ze pouziju vlastni CellRenderer oddedeny od JButton (rozhranni
TableCellRenderer) a pak CellEditor oddedeny od DefaultCellEditor.
Bohuzel ted nevim, jak vyresit to, aby se mi zmenila ikonka na danem
radku, aniz bych na ten radek kliknul....(pri kliknuti je to jednoduchy
pomoci getTableCellEditorComponent). Proste bych to potreboval udelat
tak,abych zadal pouze cislo radku (napr. nekde v jinem okne) a po
kliknuti nejakeho tlacitka se na na danem radku zmenila ikonka.
Nevite, jak na to? Dekuju za kazdou radu.
Martin
Dobry den!
Nevim, jestli chapu presne co chcete, ale snad Vam pomuze
toto.
Ikona by mela zaviset tedy asi na nejakych datech v
TableModel, ktera aktualizujete pri vyvolani akce, po ktere
ma nasledovat zmena vybrane ikony v tabulce (napr. po tom kliknuti
uzivatelem na nejake tlacitko). Model tabulky muze napriklad
ikonu predavat primo jako obsah nektereho sloupce tabulky,
coz je nejjednodussi varianta.
Po aktualizaci se pak v modelu tabulky zavola metoda
fireTableCellUpdated(...) nebo nektera z obdobnych metod,
ktere informuji posluchace udalosti (mezi nimiz je JTable) o
zmene modelu tabulky.
Lucie