1 package cz.frantovo.gui.tabulky;
5 import java.awt.event.MouseEvent;
7 import javax.swing.ImageIcon;
8 import javax.swing.table.TableModel;
11 * <p>Tato třída umožňuje jednoduchým způsobem přidat vašim tabulkám funkci
12 * řazení. Stačí ve vaší třídě nahradit: <br>
13 * "import javax.swing.JTable;"<br>
14 * tímto importem: "import cz.frantovo.gui.tabulky.JTable;"<br>
16 * <p>Pomocí klávesy ctrl jde řadit podle více sloupců</p>
17 * <p>Také přidává funkci zobrazování tooltipu (zobrazuje obsah buňky)</p>
19 * <p>Protože třídící model a skutečný model obsahují řádky v jiném pořadí,
20 * je potřeba přepočítat index získaný metodou getSelectedRow() na index ve skutečném modelu</p>
22 * k tomu sloužá tento postup:</p>
24 * int r = jTable1.getSelectedRow();
25 * int rr = ((TableSorterModel)tabulka.getModel()).modelIndex(r);
27 * <p>rr je potom index řádku ve skutečném modelu.</p>
29 * @author František Kučera
31 public class JTable extends javax.swing.JTable {
33 private static final long serialVersionUID = -5133441062459764995L;
35 private TableSorterModel tableSorterModel;
37 private TableModel realTableModel;
39 private boolean showTooltips = false;
41 public boolean isShowTooltips ()
46 /** Nastavuje, zda se mají zobrazovat tooltipy zobrazující obsah buňky */
47 public void setShowTooltips (boolean showTooltips)
49 this.showTooltips = showTooltips;
53 * Nastaví TableModel a zabalí ho do TableSorterModelu, tabulka tím
54 * získá schopnost řazení řádků
57 public void setModel (TableModel dataModel)
59 realTableModel = dataModel;
60 tableSorterModel = new TableSorterModel(dataModel);
62 tableSorterModel.setTableHeader(getTableHeader());
64 super.setModel(tableSorterModel);
68 * @return TableModel, která obsahuje data. Není tedy zabalen do
71 public TableModel getRealTableModel ()
73 return realTableModel;
77 * @return TableSorterModel, který obaluje skutečný TableModel, který
78 * obsahuje data. TableSorterModel slouží pouze k řazení položek
81 public TableModel getModel ()
83 return super.getModel();
87 * Pokud je nastaveno showTooltips, zobrazuje v tooltipu obsah buňky pod
88 * myší (hodí se, pokud je obsah buňky příliš dlouhý). Pokud buňka
89 * obsahuje ImageIcon, pak tooltip zobrazuje ImageIcon.getDescription()
92 public String getToolTipText (MouseEvent event)
95 Point p = event.getPoint();
96 int col = columnAtPoint(p);
97 int rw = rowAtPoint(p);
98 if (col >= 0 && rw >= 0) {
99 Object o = getValueAt(rw,
102 if (o instanceof ImageIcon) {
103 return ((ImageIcon) o).getDescription();
109 return super.getToolTipText();
111 return super.getToolTipText();