franta-hg@0: package cz.frantovo.gui.tabulky; franta-hg@0: franta-hg@0: import java.awt.Point; franta-hg@0: import java.awt.event.MouseEvent; franta-hg@0: franta-hg@0: import javax.swing.ImageIcon; franta-hg@0: import javax.swing.table.TableModel; franta-hg@0: franta-hg@0: /** franta-hg@2: *

Tato třída umožňuje jednoduchým způsobem přidat vašim tabulkám funkci franta-hg@2: * řazení. Stačí ve vaší třídě nahradit:
franta-hg@2: * "import javax.swing.JTable;"
franta-hg@2: * tímto importem: "import cz.frantovo.gui.tabulky.JTable;"
franta-hg@2: *

franta-hg@2: *

Pomocí klávesy ctrl jde řadit podle více sloupců

franta-hg@2: *

Také přidává funkci zobrazování tooltipu (zobrazuje obsah buňky)

franta-hg@0: * franta-hg@2: *

Protože třídící model a skutečný model obsahují řádky v jiném pořadí, franta-hg@2: * je potřeba přepočítat index získaný metodou getSelectedRow() na index ve skutečném modelu

franta-hg@2: *

franta-hg@2: * k tomu sloužá tento postup:

franta-hg@2: *
franta-hg@2:  * int r = jTable1.getSelectedRow();
franta-hg@2:  * int rr = ((TableSorterModel)tabulka.getModel()).modelIndex(r);
franta-hg@2:  * 
franta-hg@2: *

rr je potom index řádku ve skutečném modelu.

franta-hg@0: * franta-hg@0: * @author František Kučera franta-hg@0: */ franta-hg@0: public class JTable extends javax.swing.JTable { franta-hg@0: franta-hg@3: private static final long serialVersionUID = -5133441062459764995L; franta-hg@3: private TableSorterModel tableSorterModel; franta-hg@3: private TableModel realTableModel; franta-hg@3: private boolean showTooltips = false; franta-hg@0: franta-hg@3: public boolean isShowTooltips() { franta-hg@3: return showTooltips; franta-hg@3: } franta-hg@0: franta-hg@3: /** Nastavuje, zda se mají zobrazovat tooltipy zobrazující obsah buňky */ franta-hg@3: public void setShowTooltips(boolean showTooltips) { franta-hg@3: this.showTooltips = showTooltips; franta-hg@3: } franta-hg@0: franta-hg@3: /** franta-hg@3: * Nastaví TableModel a zabalí ho do TableSorterModelu, tabulka tím franta-hg@3: * získá schopnost řazení řádků franta-hg@3: */ franta-hg@3: @Override franta-hg@3: public void setModel(TableModel dataModel) { franta-hg@3: realTableModel = dataModel; franta-hg@3: tableSorterModel = new TableSorterModel(dataModel); franta-hg@0: franta-hg@3: tableSorterModel.setTableHeader(getTableHeader()); franta-hg@3: franta-hg@3: super.setModel(tableSorterModel); franta-hg@3: } franta-hg@3: franta-hg@3: /** franta-hg@3: * @return TableModel, která obsahuje data. Není tedy zabalen do franta-hg@3: * TableSorterModelu franta-hg@3: */ franta-hg@3: public TableModel getRealTableModel() { franta-hg@3: return realTableModel; franta-hg@3: } franta-hg@3: franta-hg@3: /** franta-hg@3: * @return TableSorterModel, který obaluje skutečný TableModel, který franta-hg@3: * obsahuje data. TableSorterModel slouží pouze k řazení položek franta-hg@3: */ franta-hg@3: @Override franta-hg@3: public TableModel getModel() { franta-hg@3: return super.getModel(); franta-hg@3: } franta-hg@3: franta-hg@3: /** franta-hg@3: * Pokud je nastaveno showTooltips, zobrazuje v tooltipu obsah buňky pod franta-hg@3: * myší (hodí se, pokud je obsah buňky příliš dlouhý). Pokud buňka franta-hg@3: * obsahuje ImageIcon, pak tooltip zobrazuje ImageIcon.getDescription() franta-hg@3: */ franta-hg@3: @Override franta-hg@3: public String getToolTipText(MouseEvent event) { franta-hg@3: if (showTooltips) { franta-hg@3: Point p = event.getPoint(); franta-hg@3: int col = columnAtPoint(p); franta-hg@3: int rw = rowAtPoint(p); franta-hg@3: if (col >= 0 && rw >= 0) { franta-hg@3: Object o = getValueAt(rw, franta-hg@3: col); franta-hg@3: if (o != null) { franta-hg@3: if (o instanceof ImageIcon) { franta-hg@3: return ((ImageIcon) o).getDescription(); franta-hg@3: } else { franta-hg@3: return o.toString(); franta-hg@3: } franta-hg@3: } franta-hg@3: } franta-hg@3: return super.getToolTipText(); franta-hg@3: } else { franta-hg@3: return super.getToolTipText(); franta-hg@0: } franta-hg@3: } franta-hg@0: }