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