Mega Code Archive

 
Categories / Java / Swing JFC
 

JTable selection events

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.border.Border; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; public class TableIt {   class MyTableCellRenderer extends JLabel implements TableCellRenderer {     final Border blueBorder = BorderFactory.createLineBorder(Color.BLUE);     MyTableCellRenderer() {       setOpaque(true);     }     public Component getTableCellRendererComponent(JTable table,         Object value, boolean isSelected, boolean hasFocus, int row,         int col) {       setBackground((Color) value);       if (isSelected) {         setBorder(blueBorder);       } else {         setBorder(BorderFactory.createEmptyBorder());       }       return this;     }   }   class MyTableModel extends DefaultTableModel {     Object data[][] = { { "1", Color.RED }, { "2", Color.ORANGE },         { "3", Color.YELLOW }, { "4", Color.GREEN },         { "5", Color.BLUE }, { "6", Color.MAGENTA },         { "7", Color.CYAN }, { "8", Color.PINK },         { "9", Color.BLACK }, { "10", Color.GRAY } };     MyTableModel() {       setColumnIdentifiers(new String[] { "ID", "Name", "Color" });       for (int i = 0, n = data.length; i < n; i++)         addRow(new Object[] { new Integer(i + 1), data[i][0],             data[i][1] });     }     public boolean isCellEditable(int row, int column) {       return (column != 0);     }   }   public TableIt() {     JFrame f = new JFrame();     TableModel tm = new MyTableModel();     final JTable table = new JTable(tm);     TableColumnModel tcm = table.getColumnModel();     TableColumn column = tcm.getColumn(tcm.getColumnCount() - 1);     TableCellRenderer renderer = new MyTableCellRenderer();     column.setCellRenderer(renderer);     JButton selectionType = new JButton("Next Type");     selectionType.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent e) {         boolean rowSet = table.getRowSelectionAllowed();         boolean colSet = table.getColumnSelectionAllowed();         boolean cellSet = table.getCellSelectionEnabled();         boolean setRow = !rowSet;         boolean setCol = rowSet ^ colSet;         boolean setCell = rowSet & colSet;         table.setCellSelectionEnabled(setCell);         table.setColumnSelectionAllowed(setCol);         table.setRowSelectionAllowed(setRow);         System.out.println("Row Selection Allowed? " + setRow);         System.out.println("Column Selection Allowed? " + setCol);         System.out.println("Cell Selection Enabled? " + setCell);         table.repaint();       }     });     JButton selectionMode = new JButton("Next Mode");     selectionMode.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent e) {         ListSelectionModel lsm = table.getSelectionModel();         int mode = lsm.getSelectionMode();         int nextMode;         String nextModeString;         if (mode == ListSelectionModel.SINGLE_SELECTION) {           nextMode = ListSelectionModel.SINGLE_INTERVAL_SELECTION;           nextModeString = "Single Interval Selection";         } else if (mode == ListSelectionModel.SINGLE_INTERVAL_SELECTION) {           nextMode = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION;           nextModeString = "Multiple Interval Selection";         } else {           nextMode = ListSelectionModel.SINGLE_SELECTION;           nextModeString = "Single Selection";         }         lsm.setSelectionMode(nextMode);         System.out.println("Selection Mode: " + nextModeString);         table.repaint();       }     });     JPanel jp = new JPanel();     jp.add(selectionType);     jp.add(selectionMode);     JScrollPane jsp = new JScrollPane(table);     Container c = f.getContentPane();     c.add(jsp, BorderLayout.CENTER);     c.add(jp, BorderLayout.SOUTH);     f.setSize(300, 250);     f.show();   }   public static void main(String args[]) {     new TableIt();   } }