milos_r
Čuven
- Učlanjen(a)
- 31.10.2004
- Poruke
- 488
- Poena
- 619
Pozdrav,
imam problem sa pravljenjem undo komande za menjanje celije u tabeli. Napravio sam model koji nasledjuje AbstractTableModel i u metodi isCellEditable hvatam dogadjaj promene vrednosti u celiji. Metoda izgleda ovako:
OK da bi bilo jasnije evo i klase KomandaMenjanjaCelije
A evo i klase koja upravlja komadnama i omogucava undo/redu za bilo koju komandu
Konkretno ova implementacija mi recimo lepo radi za dodavanje reda ili brisanje reda u tabeli, tada undo redo radi lepo. Medjutim za menjanje celija neradi.
Ako ima neko neku ideju kako ovo da odradim bio bih mu zahvalan.
Mogu prikaciti i ceo kod ako mislite da je potrebno.
Unapred hvala
Milos
imam problem sa pravljenjem undo komande za menjanje celije u tabeli. Napravio sam model koji nasledjuje AbstractTableModel i u metodi isCellEditable hvatam dogadjaj promene vrednosti u celiji. Metoda izgleda ovako:
Kod:
Command komanda;
NizKomandi nizZaUbacivanjeKomandi;
public boolean isCellEditable(int row, int col) {
komanda = new KomandaMenjanjaCelije(this, (Integer) getValueAt(row, col), row, col);
nizZaUbacivanjeKomandi.addCommand(komanda);
return true;
}
Kod:
public class KomandaMenjanjaCelije implements Command{
MyTableModel mtm1;
Integer novaVrednosta;
Integer strarVrednost;
int red;
int kolona;
public KomandaMenjanjaCelije(MyTableModel mtm, Integer novaVrednost, int red, int kolona)
{
this.mtm1 = mtm;
this.novaVrednosta = (Integer) novaVrednost;
this.red = red;
this.kolona = kolona;
this.strarVrednost = (Integer) mtm1.getValueAt(red, kolona);
}
public void execute() {
mtm1.setValueAt(novaVrednosta, red, kolona);
}
public void undo() {
mtm1.setValueAt(strarVrednost, red, kolona);
}
}
Kod:
public class NizKomandi {
private Stack<Command> mainStack = new Stack<Command>();
private Stack<Command> redoStack = new Stack<Command>();
private Command command;
public void addCommand(Command c) {
c.execute();
mainStack.add(c);
redoStack.clear();
}
public void undoCommand() {
command = mainStack.pop();
command.undo();
redoStack.push(command);
}
public void redoCommand() {
command = redoStack.pop();
command.execute();
mainStack.push(command);
}
}
Ako ima neko neku ideju kako ovo da odradim bio bih mu zahvalan.
Mogu prikaciti i ceo kod ako mislite da je potrebno.
Unapred hvala
Milos