Tabulky v Javě
Z MiS
				
				
				(Rozdíly mezi verzemi)
				
																
				
				
								
				
Verze z 29. 7. 2011, 15:06
Více viz: Oracle.com > Tutorial > Table.
  javax.swing.JTable 
- Zobrazuje data v podobě tabulky.
-  Data pro zobrazení čerpá z libovolné třídy, která implementuje interface TableModel
JTable table = new JTable(new MyTableModel());
  javax.swing.table.AbstractTableModel 
-  Rozhraní TableModelmá mnoho metod, které by se u většiny tabulek opakovali.
-  Abstraktní třída AbstractTableModeltedy nabízí standardní implementaci většiny metod rozhraníTableModel. Stačí tedy zdědit tyto metody a předefinovat ty, u kterých vyžadujeme jiné než standardní chování.
- Řeší ošetření události a uložení posluchačů (listenerů).
- Pokud neřekneme jinak, tabulka je standardně needitovatelná.
- Abstraktní metody (musí být předefinovány)
-  int getRowCount()
-  int getColumnCount()
-  Object getValueAt(int row, int column)- vrací obsah buňky na řádku row a ve sloupci column
 
- Lze předefinovat také další metody
-  String getColumnName(int col)- popis sloupce, tedy co se má zobrazit v hlavičce sloupce
 
-  <code>boolean isCellEditable(int row, int col)
-  pokud vrátí <code>true, pak bude buňka na řádku rowa ve sloupcicoleditovatelná
-  při zapsání hodnoty JTablezavolá metodysetValueAt().
 
-  pokud vrátí <code>true, pak bude buňka na řádku 
-  void setValueAt(Object, row, col)naši třídu, že hodnota v buňce se změnila. Je na nás, abychom zařídili odpovídající úpravu našich dat.- touto metodou informuje <code>JTable
 
- Jak s třídou pracujeme
- Typicky vytváříme potomka této třídy.
-  Náš potomek přidává jako atribut data, která se mají zobrazovat v tabulce.
-  Například pro tabulku s údaji studentů ve třídě by mohla fungovat třída TridaModel, která by byla potomkemAbstractTableModela jako atribut mělaArrayList<Student>, kdeStudentbude třída nesoucí informace o studentovi.
 
-  Například pro tabulku s údaji studentů ve třídě by mohla fungovat třída 
-  Když JTablechce zobrazit tabulku, vyžádá si data od modelu.-  V našem příkladě zavolá metodu getValueAttřídyTridaModelpostupně pro čísla řádku a sloupce (1,1), (2,1),... atd. Každým voláním zjistí hodnotu jedné buňky a vypíše ji.
 
-  V našem příkladě zavolá metodu 
-  Pokud se uživatel pokusí do některé buňky zapsat, JTablemu to povolí pouze, pokud mu metodaisCellEditablevrátítrue.
-  Pokud je zápis povolen, předá JTabledata našemu modelu-  Instance JTabletedy zavolá metodusetValueAttřídyTridaModel. Na toto volání je třeba zareagovat tak, že se vyhledá v seznamu správný student (podle čísla řádku) a upraví se jeho údaje (podle čísla sloupce zjistíme, který údaj se změnil).
 
-  Instance 
- Pokud se změní data v tabulce, musíme informovat své posluchače
-  K tomu stačí zavolat připravené metody, které zdědíme ze třídy AbstractTableModel
-  void fireTableDataChanged()— obecná změna dat
-  void fireTableRowsDeleted(int firstRow, int lastRow)— smazání daných řádků
- a další...
  javax.swing.JScrollPane 
- Zajistí, aby se vykreslila jen část tabulky, pokud je tabulka moc veliká a nevleze se do okna.
- Pokud se tabulka nevleze do okna, zobrazí na okrajích okna posuvníky tak, abychom mohli zobrazit libovolnou část tabulky.
- Součásti
-  JViewPort- místo, kde se zobrazují data
-  může zobrazit hlavičku řádku či sloupce — setColumnHeaderView,setRowHeaderView
 
-  JScrollBar— posuvníky- mohou a nemusí být zobrazeny
- standardně se zobrazují jen pokud je potřeba
 
- Použití pro zobrazení tabulky
JScrollPane scrollPane = new JScrollPane(table); panel.add(scrollPane);
