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