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