Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Table selection mode

/*  * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *  *   - Redistributions of source code must retain the above copyright  *     notice, this list of conditions and the following disclaimer.  *  *   - Redistributions in binary form must reproduce the above copyright  *     notice, this list of conditions and the following disclaimer in the  *     documentation and/or other materials provided with the distribution.  *  *   - Neither the name of Sun Microsystems nor the names of its  *     contributors may be used to endorse or promote products derived  *     from this software without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */ /*  * SimpleTableSelectionDemo.java requires no other files.  */ import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /**  * SimpleTableSelectionDemo is just like SimpleTableDemo, except that it detects  * selections, printing information about the current selection to standard  * output.  */ public class SimpleTableSelectionDemo extends JPanel {   private boolean DEBUG = false;   private boolean ALLOW_COLUMN_SELECTION = false;   private boolean ALLOW_ROW_SELECTION = true;   public SimpleTableSelectionDemo() {     super(new GridLayout(1, 0));     final String[] columnNames = { "First Name", "Last Name", "Sport",         "# of Years", "Vegetarian" };     final Object[][] data = {         { "Mary", "Campione", "Snowboarding", new Integer(5),             new Boolean(false) },         { "Alison", "Huml", "Rowing", new Integer(3), new Boolean(true) },         { "Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false) },         { "Sharon", "Zakhour", "Speed reading", new Integer(20),             new Boolean(true) },         { "Philip", "Milne", "Pool", new Integer(10), new Boolean(false) } };     final JTable table = new JTable(data, columnNames);     table.setPreferredScrollableViewportSize(new Dimension(500, 70));     table.setFillsViewportHeight(true);     table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);     if (ALLOW_ROW_SELECTION) { // true by default       ListSelectionModel rowSM = table.getSelectionModel();       rowSM.addListSelectionListener(new ListSelectionListener() {         public void valueChanged(ListSelectionEvent e) {           // Ignore extra messages.           if (e.getValueIsAdjusting())             return;           ListSelectionModel lsm = (ListSelectionModel) e.getSource();           if (lsm.isSelectionEmpty()) {             System.out.println("No rows are selected.");           } else {             int selectedRow = lsm.getMinSelectionIndex();             System.out.println("Row " + selectedRow + " is now selected.");           }         }       });     } else {       table.setRowSelectionAllowed(false);     }     if (ALLOW_COLUMN_SELECTION) { // false by default       if (ALLOW_ROW_SELECTION) {         // We allow both row and column selection, which         // implies that we *really* want to allow individual         // cell selection.         table.setCellSelectionEnabled(true);       }       table.setColumnSelectionAllowed(true);       ListSelectionModel colSM = table.getColumnModel().getSelectionModel();       colSM.addListSelectionListener(new ListSelectionListener() {         public void valueChanged(ListSelectionEvent e) {           // Ignore extra messages.           if (e.getValueIsAdjusting())             return;           ListSelectionModel lsm = (ListSelectionModel) e.getSource();           if (lsm.isSelectionEmpty()) {             System.out.println("No columns are selected.");           } else {             int selectedCol = lsm.getMinSelectionIndex();             System.out.println("Column " + selectedCol + " is now selected.");           }         }       });     }     if (DEBUG) {       table.addMouseListener(new MouseAdapter() {         public void mouseClicked(MouseEvent e) {           printDebugData(table);         }       });     }     // Create the scroll pane and add the table to it.     JScrollPane scrollPane = new JScrollPane(table);     // Add the scroll pane to this panel.     add(scrollPane);   }   private void printDebugData(JTable table) {     int numRows = table.getRowCount();     int numCols = table.getColumnCount();     javax.swing.table.TableModel model = table.getModel();     System.out.println("Value of data: ");     for (int i = 0; i < numRows; i++) {       System.out.print("    row " + i + ":");       for (int j = 0; j < numCols; j++) {         System.out.print("  " + model.getValueAt(i, j));       }       System.out.println();     }     System.out.println("--------------------------");   }   /**    * Create the GUI and show it. For thread safety, this method should be    * invoked from the event-dispatching thread.    */   private static void createAndShowGUI() {     // Create and set up the window.     JFrame frame = new JFrame("SimpleTableSelectionDemo");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // Create and set up the content pane.     SimpleTableSelectionDemo newContentPane = new SimpleTableSelectionDemo();     newContentPane.setOpaque(true); // content panes must be opaque     frame.setContentPane(newContentPane);     // Display the window.     frame.pack();     frame.setVisible(true);   }   public static void main(String[] args) {     // Schedule a job for the event-dispatching thread:     // creating and showing this application's GUI.     javax.swing.SwingUtilities.invokeLater(new Runnable() {       public void run() {         createAndShowGUI();       }     });   } }