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