1 package cz.frantovo.gui.tabulky;
4 import java.awt.event.MouseEvent;
6 import javax.swing.ImageIcon;
7 import javax.swing.table.TableModel;
10 * <p>Tato třída umožňuje jednoduchým způsobem přidat vašim tabulkám funkci
11 * řazení. Stačí ve vaší třídě nahradit: <br>
12 * "import javax.swing.JTable;"<br>
13 * tímto importem: "import cz.frantovo.gui.tabulky.JTable;"<br>
15 * <p>Pomocí klávesy ctrl jde řadit podle více sloupců</p>
16 * <p>Také přidává funkci zobrazování tooltipu (zobrazuje obsah buňky)</p>
18 * <p>Protože třídící model a skutečný model obsahují řádky v jiném pořadí,
19 * je potřeba přepočítat index získaný metodou getSelectedRow() na index ve skutečném modelu</p>
21 * k tomu sloužá tento postup:</p>
23 * int r = jTable1.getSelectedRow();
24 * int rr = ((TableSorterModel)tabulka.getModel()).modelIndex(r);
26 * <p>rr je potom index řádku ve skutečném modelu.</p>
28 * @author František Kučera
30 public class JTable extends javax.swing.JTable {
32 private static final long serialVersionUID = -5133441062459764995L;
33 private TableSorterModel tableSorterModel;
34 private TableModel realTableModel;
35 private boolean showTooltips = false;
37 public boolean isShowTooltips() {
41 /** Nastavuje, zda se mají zobrazovat tooltipy zobrazující obsah buňky */
42 public void setShowTooltips(boolean showTooltips) {
43 this.showTooltips = showTooltips;
47 * Nastaví TableModel a zabalí ho do TableSorterModelu, tabulka tím
48 * získá schopnost řazení řádků
51 public void setModel(TableModel dataModel) {
52 realTableModel = dataModel;
53 tableSorterModel = new TableSorterModel(dataModel);
55 tableSorterModel.setTableHeader(getTableHeader());
57 super.setModel(tableSorterModel);
61 * @return TableModel, která obsahuje data. Není tedy zabalen do
64 public TableModel getRealTableModel() {
65 return realTableModel;
69 * @return TableSorterModel, který obaluje skutečný TableModel, který
70 * obsahuje data. TableSorterModel slouží pouze k řazení položek
73 public TableModel getModel() {
74 return super.getModel();
78 * Pokud je nastaveno showTooltips, zobrazuje v tooltipu obsah buňky pod
79 * myší (hodí se, pokud je obsah buňky příliš dlouhý). Pokud buňka
80 * obsahuje ImageIcon, pak tooltip zobrazuje ImageIcon.getDescription()
83 public String getToolTipText(MouseEvent event) {
85 Point p = event.getPoint();
86 int col = columnAtPoint(p);
87 int rw = rowAtPoint(p);
88 if (col >= 0 && rw >= 0) {
89 Object o = getValueAt(rw,
92 if (o instanceof ImageIcon) {
93 return ((ImageIcon) o).getDescription();
99 return super.getToolTipText();
101 return super.getToolTipText();