1  import java.awt.*;
  2  import java.awt.event.*;
  3  import javax.swing.*;
  4  import javax.swing.event.*;
  5  import javax.swing.table.*;
  6  import java.util.*;
  7  
  8  public class TableEventsDemo extends JApplet {
  9    // Create table column names
 10    private String[] columnNames =
 11      {"Title", "Copies Needed", "Publisher", "Date Published",
 12       "In-stock", "Book Photo"};
 13  
 14    // Create image icons
 15    private ImageIcon intro1eImageIcon =
 16      new ImageIcon(getClass().getResource("/image/intro1e.gif"));
 17    private ImageIcon intro2eImageIcon =
 18      new ImageIcon(getClass().getResource("/image/intro2e.gif"));
 19    private ImageIcon intro3eImageIcon =
 20      new ImageIcon(getClass().getResource("/image/intro3e.jpg"));
 21  
 22    // Create table data
 23    private Object[][] rowData = {
 24      {"Introduction to Java Programming", 120,
 25       "Que Education & Training",
 26        new GregorianCalendar(1998, 1-1, 6).getTime(),
 27        false, intro1eImageIcon},
 28      {"Introduction to Java Programming, 2E", 220,
 29       "Que Education & Training",
 30        new GregorianCalendar(1999, 1-1, 6).getTime(),
 31        false, intro2eImageIcon},
 32      {"Introduction to Java Programming, 3E", 220,
 33        "Prentice Hall",
 34        new GregorianCalendar(2000, 12-1, 0).getTime(),
 35        true, intro3eImageIcon},
 36    };
 37  
 38    // Create a table model
 39    private MyTableModel tableModel = new MyTableModel(
 40      rowData, columnNames);
 41  
 42    // Create a table
 43    private JTable jTable1 = new JTable(tableModel);
 44  
 45    // Get table column model
 46    private TableColumnModel tableColumnModel =
 47      jTable1.getColumnModel();
 48  
 49    // Get table selection model
 50    private ListSelectionModel selectionModel =
 51      jTable1.getSelectionModel();
 52  
 53    // Create a text area
 54    private JTextArea jtaMessage = new JTextArea();
 55  
 56    // Create a button
 57    private JButton jbtDeleteColumn =
 58      new JButton("Delete Selected Column");
 59  
 60    public TableEventsDemo() {
 61      // Set custom renderer for displaying images
 62      TableColumn bookCover = jTable1.getColumn("Book Photo");
 63      bookCover.setCellRenderer(new MyImageCellRenderer());
 64  
 65      // Create a combo box for publishers
 66      JComboBox jcboPublishers = new JComboBox();
 67      jcboPublishers.addItem("Prentice Hall");
 68      jcboPublishers.addItem("Que Education & Training");
 69      jcboPublishers.addItem("McGraw-Hill");
 70  
 71      // Set combo box as the editor for the publisher column
 72      TableColumn publisherColumn = jTable1.getColumn("Publisher");
 73      publisherColumn.setCellEditor(
 74        new DefaultCellEditor(jcboPublishers));
 75  
 76      jTable1.setRowHeight(60);
 77      jTable1.setColumnSelectionAllowed(true);
 78  
 79      JSplitPane jSplitPane1 = new JSplitPane(
 80        JSplitPane.VERTICAL_SPLIT);
 81      jSplitPane1.add(new JScrollPane(jTable1), JSplitPane.LEFT);
 82      jSplitPane1.add(new JScrollPane(jtaMessage), JSplitPane.RIGHT);
 83      add(jbtDeleteColumn, BorderLayout.NORTH);
 84      add(jSplitPane1, BorderLayout.CENTER);
 85  
 86      tableModel.addTableModelListener(new TableModelListener() {
 87        @Override
 88        public void tableChanged(TableModelEvent e) {
 89          jtaMessage.append("Table changed at row " +
 90            e.getFirstRow() + " and column " + e.getColumn() + "\n");
 91        }
 92      });
 93  
 94      tableColumnModel.addColumnModelListener(
 95          new TableColumnModelListener() {
 96        @Override
 97        public void columnRemoved(TableColumnModelEvent e) {
 98          jtaMessage.append("Column indexed at " + e.getFromIndex() +
 99            " is deleted \n");
100        }
101        
102        @Override
103        public void columnAdded(TableColumnModelEvent e) {
104        }
105        
106        @Override
107        public void columnMoved(TableColumnModelEvent e) {
108        }
109        
110        @Override
111        public void columnMarginChanged(ChangeEvent e) {
112        }
113        
114        @Override
115        public void columnSelectionChanged(ListSelectionEvent e) {
116        }
117      });
118  
119      jbtDeleteColumn.addActionListener(new ActionListener() {
120        @Override
121        public void actionPerformed(ActionEvent e) {
122          if (jTable1.getSelectedColumn() >= 0) {
123            TableColumnModel columnModel = jTable1.getColumnModel();
124            TableColumn tableColumn =
125                columnModel.getColumn(jTable1.getSelectedColumn());
126            columnModel.removeColumn(tableColumn);
127          }
128        }
129      });
130  
131      selectionModel.addListSelectionListener(
132          new ListSelectionListener() {
133        @Override
134        public void valueChanged(ListSelectionEvent e) {
135          jtaMessage.append("Row " + jTable1.getSelectedRow() +
136            " and column " + jTable1.getSelectedColumn() +
137            " selected\n");
138        }
139      });
140    }
141  
142    public static void main(String[] args) {
143      TableEventsDemo applet = new TableEventsDemo();
144      JFrame frame = new JFrame();
145      //EXIT_ON_CLOSE == 3
146      frame.setDefaultCloseOperation(3);
147      frame.setTitle("TableEventsDemo");
148      frame.getContentPane().add(applet, BorderLayout.CENTER);
149      applet.init();
150      applet.start();
151      frame.setSize(400,320);
152      Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
153      frame.setLocation((d.width - frame.getSize().width) / 2,
154        (d.height - frame.getSize().height) / 2);
155      frame.setVisible(true);
156    }
157  }