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