salexb Salex B. Banja Luka
Član broj: 142226 Poruke: 8 *.teol.net.
|
package kafana;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class ModelTabele extends AbstractTableModel{
/** Creates a new instance of ModelTabele */
public ModelTabele() {
niz = new ArrayList<String[]>();
}
public String getValueAt(int rowIndex, int columnIndex) {
String[] s = niz.get(rowIndex);
return s[columnIndex];
}
public int getRowCount() {
return niz.size();
}
public int getColumnCount() {
return brojKolona;
}
public String getColumnName(int column) {
return nazivKolone[column];
}
// Ovo je moja metoda koju koristim iz glavne klase da dodam red u tabelu, tj. njen model
public void insert(String[] value) {
niz.add(value);
}
// Moja metoda koju pozivam kada hocu samo neki red iz tabele da obrisem i proslijedim joj broj tog reda
public void delete (int rowIndex) {
niz.remove(rowIndex);
update();
}
// Takodje moja metoda koju pozovem kada trebam izbrisati sadrzaj cijele tabele
public void deleteAll() {
niz.clear();
update();
}
/* Takodje moja metoda. Treba je pozvati svaki put kada se doda novi red u tabelu, obrise iz nje i sl.
Ona "opali" dogadjaj fireTableChanged() koji alarmira tabelu da je njen model promijenjen i da apdejtuje
njen tzv. view, jer tabela samo sluzi za prikaz podataka iz modela !!! */
public void update() {
fireTableChanged(null);
}
// Igrom slusaja je ovdje brojKolona 5, jer je meni tako trebalo
private int brojKolona=5;
private int brojRedova;
private String[] nazivKolone= {"Šifra", "Naziv", "Količina", "Cijena", "Ukupno"};
private ArrayList<String[]> niz;
}
U glavnoj klasi imas:
ModelTabele mojModel = new ModelTabele();
E to je bio model tabele, koji treba proslijediti konstruktoru komponente JTable u glavnom prozoru ili gdje se vec nalazi vasa tabela, a ovo treba uraditi na sljedeci nacin: U Netbeans-u oznacis samu tabelu, odes na njen Protepries, pa izaberes osobinu "model". Kada se otvori, onda odes na drugu karticu, izaberes iz padajuce liste "Form COnnection", pa skroz dole se dobija polje "User Code". E tu samo ukucaj naziv objekta ove klase odozgo koju si tu napravio, bez tacke zareza, bez icega drugog, samo naziv kakav jeste u stvari (u ovom slucaju mojModel). Mozda previse detaljisem, ali nek se svako moze snaci. Mada mozes samo pozvati metodu setModel(mojModel) nakon initComponents() metode u NetBeans-u.
Sada kada pokrenes program imaces tabelu za kolonama koje si definisao i bice prazna naravno.
Kada hoces nesto dodati u tabelu koristis metode iz klase ModelTabele:
Recimo da se tabela zove jTable1;
String[] s = {"001", "Pivo", "2", "2.50", "5.00"}
mojModel.insert(s);
jTabela1.update();
I bez problema dobijas red u tabeli. Ako recimo izdas neki racun, trebas pobrisati cijelu tabeli, pa da je bi pozivao metodu delete(int rowIndex), samo pozoves:
mojModel.deleteAll();
jTabela.update();
Za brisanje nekog reda u tabeli, mozes raditi sa metodom:
mojModel.delete(2);
jTabela1.update();
Ovim brises drugi red u tabeli, tj. treci jer u tabeli redovi idu od indexa nula, a ako hoces izbrisati neki red koji je korisnik selektovao pa pritisnuo delete na tastaturi ili kliknuo na dugme "delete" recimo:
mojModel.delete(jTabela1.getSelectedRow());
jTabela1.update();
Evo jos neki korisnih stvari koje se regulisu u samom kodu za tabelu, tipa vrste fonta za zaglavlje, tj. nazive kolona, poravnanje pojedinih kolona i sl.
// Podesavanje hedera tabele
jtTabela.getTableHeader().setBackground(new Color(255, 255, 255));
jtTabela.getTableHeader().setFont(new java.awt.Font("Tahoma", 1, 13));
// Onemogucavanje mijenjanja sirina nekih kolona
jtTabela.getColumnModel().getColumn(0).setResizable(false);
jtTabela.getColumnModel().getColumn(1).setResizable(false);
// Podesavanje sirine za svaku kolonu posebno
jtTabela.getColumnModel().getColumn(0).setPreferredWidth(50);
jtTabela.getColumnModel().getColumn(1).setPreferredWidth(210);
// Podesavanje poravnanja texta u pojedinim kolonama
DefaultTableCellRenderer r = new DefaultTableCellRenderer();
r.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
jtTabela.getColumnModel().getColumn(2).setCellRenderer(r);
jtTabela.getColumnModel().getColumn(3).setCellRenderer(r);
Postoji jos jedna metoda koja se moze implementirati u modelu tabele, getClass(), a ona sluzi da bi se u tabeli mogao prikazati checkbox, combobox i sl. Nju treba implementirati za te stvari, a vise o tome ima u Sun-ovom tutorijalu za javu, koji se nalazi na njihovom sajtu, a i o svemu ovome.
Nadam se da sam pomogao. Pozz
|