changeset 4025:10f3161ff33f

7027701: /jfc/TableExample demo needs to be improved Reviewed-by: alexp
author mrkam
date Wed, 30 Mar 2011 08:58:02 -0700
parents 08bd29e16159
children 7e4ce6c1e58b
files src/share/demo/jfc/TableExample/JDBCAdapter.java src/share/demo/jfc/TableExample/OldJTable.java src/share/demo/jfc/TableExample/TableExample.java src/share/demo/jfc/TableExample/TableExample2.java src/share/demo/jfc/TableExample/TableExample3.java src/share/demo/jfc/TableExample/TableExample4.java src/share/demo/jfc/TableExample/TableMap.java src/share/demo/jfc/TableExample/TableSorter.java
diffstat 8 files changed, 603 insertions(+), 453 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/demo/jfc/TableExample/JDBCAdapter.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/JDBCAdapter.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,46 +29,50 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.table.AbstractTableModel;
+
 
 /**
  * An adaptor, transforming the JDBC interface to the TableModel interface.
  *
  * @author Philip Milne
  */
+@SuppressWarnings("serial")
+public class JDBCAdapter extends AbstractTableModel {
 
-import java.util.Vector;
-import java.sql.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.event.TableModelEvent;
-
-public class JDBCAdapter extends AbstractTableModel {
-    Connection          connection;
-    Statement           statement;
-    ResultSet           resultSet;
-    String[]            columnNames = {};
-    Vector              rows = new Vector();
-    ResultSetMetaData   metaData;
+    Connection connection;
+    Statement statement;
+    ResultSet resultSet;
+    String[] columnNames = {};
+    List<List<Object>> rows = new ArrayList<List<Object>>();
+    ResultSetMetaData metaData;
 
     public JDBCAdapter(String url, String driverName,
-                       String user, String passwd) {
+            String user, String passwd) {
         try {
             Class.forName(driverName);
             System.out.println("Opening db connection");
 
             connection = DriverManager.getConnection(url, user, passwd);
             statement = connection.createStatement();
-        }
-        catch (ClassNotFoundException ex) {
+        } catch (ClassNotFoundException ex) {
             System.err.println("Cannot find the database driver classes.");
             System.err.println(ex);
-        }
-        catch (SQLException ex) {
+        } catch (SQLException ex) {
             System.err.println("Cannot connect to this database.");
             System.err.println(ex);
         }
-     }
+    }
 
     public void executeQuery(String query) {
         if (connection == null || statement == null) {
@@ -79,27 +83,28 @@
             resultSet = statement.executeQuery(query);
             metaData = resultSet.getMetaData();
 
-            int numberOfColumns =  metaData.getColumnCount();
+            int numberOfColumns = metaData.getColumnCount();
             columnNames = new String[numberOfColumns];
             // Get the column names and cache them.
             // Then we can close the connection.
-            for(int column = 0; column < numberOfColumns; column++) {
-                columnNames[column] = metaData.getColumnLabel(column+1);
+            for (int column = 0; column < numberOfColumns; column++) {
+                columnNames[column] = metaData.getColumnLabel(column + 1);
             }
 
             // Get all rows.
-            rows = new Vector();
+            rows = new ArrayList<List<Object>>();
             while (resultSet.next()) {
-                Vector newRow = new Vector();
+                List<Object> newRow = new ArrayList<Object>();
                 for (int i = 1; i <= getColumnCount(); i++) {
-                    newRow.addElement(resultSet.getObject(i));
+                    newRow.add(resultSet.getObject(i));
                 }
-                rows.addElement(newRow);
+                rows.add(newRow);
             }
             //  close(); Need to copy the metaData, bug in jdbc:odbc driver.
-            fireTableChanged(null); // Tell the listeners a new table has arrived.
-        }
-        catch (SQLException ex) {
+
+            // Tell the listeners a new table has arrived.
+            fireTableChanged(null);
+        } catch (SQLException ex) {
             System.err.println(ex);
         }
     }
@@ -111,6 +116,7 @@
         connection.close();
     }
 
+    @Override
     protected void finalize() throws Throwable {
         close();
         super.finalize();
@@ -121,9 +127,8 @@
     //             Implementation of the TableModel Interface
     //
     //////////////////////////////////////////////////////////////////////////
-
     // MetaData
-
+    @Override
     public String getColumnName(int column) {
         if (columnNames[column] != null) {
             return columnNames[column];
@@ -132,49 +137,49 @@
         }
     }
 
-    public Class getColumnClass(int column) {
+    @Override
+    public Class<?> getColumnClass(int column) {
         int type;
         try {
-            type = metaData.getColumnType(column+1);
-        }
-        catch (SQLException e) {
+            type = metaData.getColumnType(column + 1);
+        } catch (SQLException e) {
             return super.getColumnClass(column);
         }
 
-        switch(type) {
-        case Types.CHAR:
-        case Types.VARCHAR:
-        case Types.LONGVARCHAR:
-            return String.class;
+        switch (type) {
+            case Types.CHAR:
+            case Types.VARCHAR:
+            case Types.LONGVARCHAR:
+                return String.class;
 
-        case Types.BIT:
-            return Boolean.class;
+            case Types.BIT:
+                return Boolean.class;
 
-        case Types.TINYINT:
-        case Types.SMALLINT:
-        case Types.INTEGER:
-            return Integer.class;
+            case Types.TINYINT:
+            case Types.SMALLINT:
+            case Types.INTEGER:
+                return Integer.class;
 
-        case Types.BIGINT:
-            return Long.class;
+            case Types.BIGINT:
+                return Long.class;
 
-        case Types.FLOAT:
-        case Types.DOUBLE:
-            return Double.class;
+            case Types.FLOAT:
+            case Types.DOUBLE:
+                return Double.class;
 
-        case Types.DATE:
-            return java.sql.Date.class;
+            case Types.DATE:
+                return java.sql.Date.class;
 
-        default:
-            return Object.class;
+            default:
+                return Object.class;
         }
     }
 
+    @Override
     public boolean isCellEditable(int row, int column) {
         try {
-            return metaData.isWritable(column+1);
-        }
-        catch (SQLException e) {
+            return metaData.isWritable(column + 1);
+        } catch (SQLException e) {
             return false;
         }
     }
@@ -184,14 +189,13 @@
     }
 
     // Data methods
-
     public int getRowCount() {
         return rows.size();
     }
 
     public Object getValueAt(int aRow, int aColumn) {
-        Vector row = (Vector)rows.elementAt(aRow);
-        return row.elementAt(aColumn);
+        List<Object> row = rows.get(aRow);
+        return row.get(aColumn);
     }
 
     public String dbRepresentation(int column, Object value) {
@@ -202,43 +206,42 @@
         }
 
         try {
-            type = metaData.getColumnType(column+1);
-        }
-        catch (SQLException e) {
+            type = metaData.getColumnType(column + 1);
+        } catch (SQLException e) {
             return value.toString();
         }
 
-        switch(type) {
-        case Types.INTEGER:
-        case Types.DOUBLE:
-        case Types.FLOAT:
-            return value.toString();
-        case Types.BIT:
-            return ((Boolean)value).booleanValue() ? "1" : "0";
-        case Types.DATE:
-            return value.toString(); // This will need some conversion.
-        default:
-            return "\""+value.toString()+"\"";
+        switch (type) {
+            case Types.INTEGER:
+            case Types.DOUBLE:
+            case Types.FLOAT:
+                return value.toString();
+            case Types.BIT:
+                return ((Boolean) value).booleanValue() ? "1" : "0";
+            case Types.DATE:
+                return value.toString(); // This will need some conversion.
+            default:
+                return "\"" + value.toString() + "\"";
         }
 
     }
 
+    @Override
     public void setValueAt(Object value, int row, int column) {
         try {
-            String tableName = metaData.getTableName(column+1);
+            String tableName = metaData.getTableName(column + 1);
             // Some of the drivers seem buggy, tableName should not be null.
             if (tableName == null) {
                 System.out.println("Table name returned null.");
             }
             String columnName = getColumnName(column);
             String query =
-                "update "+tableName+
-                " set "+columnName+" = "+dbRepresentation(column, value)+
-                " where ";
+                    "update " + tableName + " set " + columnName + " = "
+                    + dbRepresentation(column, value) + " where ";
             // We don't have a model of the schema so we don't know the
             // primary keys or which columns to lock on. To demonstrate
             // that editing is possible, we'll just lock on everything.
-            for(int col = 0; col<getColumnCount(); col++) {
+            for (int col = 0; col < getColumnCount(); col++) {
                 String colName = getColumnName(col);
                 if (colName.equals("")) {
                     continue;
@@ -246,19 +249,18 @@
                 if (col != 0) {
                     query = query + " and ";
                 }
-                query = query + colName +" = "+
-                    dbRepresentation(col, getValueAt(row, col));
+                query = query + colName + " = " + dbRepresentation(col,
+                        getValueAt(row, col));
             }
             System.out.println(query);
             System.out.println("Not sending update to database");
             // statement.executeQuery(query);
-        }
-        catch (SQLException e) {
+        } catch (SQLException e) {
             //     e.printStackTrace();
             System.err.println("Update failed");
         }
-        Vector dataRow = (Vector)rows.elementAt(row);
-        dataRow.setElementAt(value, column);
+        List<Object> dataRow = rows.get(row);
+        dataRow.set(column, value);
 
     }
 }
--- a/src/share/demo/jfc/TableExample/OldJTable.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/OldJTable.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,28 +29,26 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
 
-import java.lang.Thread;
-import java.util.*;
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.table.*;
+import java.util.EventObject;
+import java.util.List;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
 
 
 /**
  *  The OldJTable is an unsupported class containing some methods that were
  *  deleted from the JTable between releases 0.6 and 0.7
  */
+@SuppressWarnings("serial")
 public class OldJTable extends JTable
 {
    /*
-    *  A new convenience method returning the index of the column in the co-ordinate
-    *  space of the view.
+    *  A new convenience method returning the index of the column in the
+    *  co-ordinate space of the view.
     */
     public int getColumnIndex(Object identifier) {
         return getColumnModel().getColumnIndex(identifier);
@@ -65,7 +63,7 @@
         return addColumn(columnIdentifier, width, null, null, null);
     }
 
-    public TableColumn addColumn(Object columnIdentifier, Vector columnData) {
+    public TableColumn addColumn(Object columnIdentifier, List columnData) {
         return addColumn(columnIdentifier, -1, null, null, columnData);
     }
 
@@ -79,16 +77,17 @@
 
     public TableColumn addColumn(Object columnIdentifier, int width,
                                  TableCellRenderer renderer,
-                                 TableCellEditor editor, Vector columnData) {
+                                 TableCellEditor editor, List columnData) {
         checkDefaultTableModel();
 
         // Set up the model side first
         DefaultTableModel m = (DefaultTableModel)getModel();
-        m.addColumn(columnIdentifier, columnData);
+        m.addColumn(columnIdentifier, columnData.toArray());
 
         // The column will have been added to the end, so the index of the
         // column in the model is the last element.
-        TableColumn newColumn = new TableColumn(m.getColumnCount()-1, width, renderer, editor);
+        TableColumn newColumn = new TableColumn(
+                m.getColumnCount()-1, width, renderer, editor);
         super.addColumn(newColumn);
         return newColumn;
     }
@@ -104,9 +103,9 @@
         ((DefaultTableModel)getModel()).addRow(rowData);
     }
 
-    public void addRow(Vector rowData) {
+    public void addRow(List rowData) {
         checkDefaultTableModel();
-        ((DefaultTableModel)getModel()).addRow(rowData);
+        ((DefaultTableModel)getModel()).addRow(rowData.toArray());
     }
 
     public void removeRow(int rowIndex) {
@@ -124,9 +123,9 @@
         ((DefaultTableModel)getModel()).insertRow(rowIndex, rowData);
     }
 
-    public void insertRow(int rowIndex, Vector rowData) {
+    public void insertRow(int rowIndex, List rowData) {
         checkDefaultTableModel();
-        ((DefaultTableModel)getModel()).insertRow(rowIndex, rowData);
+        ((DefaultTableModel)getModel()).insertRow(rowIndex, rowData.toArray());
     }
 
     public void setNumRows(int newSize) {
@@ -134,9 +133,10 @@
         ((DefaultTableModel)getModel()).setNumRows(newSize);
     }
 
-    public void setDataVector(Vector newData, Vector columnIds) {
+    public void setDataVector(Object[][] newData, List columnIds) {
         checkDefaultTableModel();
-        ((DefaultTableModel)getModel()).setDataVector(newData, columnIds);
+        ((DefaultTableModel)getModel()).setDataVector(
+                newData, columnIds.toArray());
     }
 
     public void setDataVector(Object[][] newData, Object[] columnIds) {
@@ -154,11 +154,11 @@
 //
 
     public Object getValueAt(Object columnIdentifier, int rowIndex) {
-        return  super.getValueAt(rowIndex, getColumnIndex(columnIdentifier));
+        return super.getValueAt(rowIndex, getColumnIndex(columnIdentifier));
     }
 
     public boolean isCellEditable(Object columnIdentifier, int rowIndex) {
-        return  super.isCellEditable(rowIndex, getColumnIndex(columnIdentifier));
+        return super.isCellEditable(rowIndex, getColumnIndex(columnIdentifier));
     }
 
     public void setValueAt(Object aValue, Object columnIdentifier, int rowIndex) {
@@ -217,7 +217,8 @@
     public TableColumn addColumn(int modelColumn, int width,
                                  TableCellRenderer renderer,
                                  TableCellEditor editor) {
-        TableColumn newColumn = new TableColumn(modelColumn, width, renderer, editor);
+        TableColumn newColumn = new TableColumn(
+                modelColumn, width, renderer, editor);
         addColumn(newColumn);
         return newColumn;
     }
--- a/src/share/demo/jfc/TableExample/TableExample.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/TableExample.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,8 +29,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
 
 /**
  * A a UI around the JDBCAdaptor, allowing database data to be interactively
@@ -41,41 +39,56 @@
  *
  * @author Philip Milne
  */
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+import javax.swing.border.BevelBorder;
 
-import java.applet.Applet;
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.table.*;
-import javax.swing.event.*;
-import javax.swing.border.*;
 
-public class TableExample implements LayoutManager {
+public final class TableExample implements LayoutManager {
+
     static String[] ConnectOptionNames = { "Connect" };
-    static String   ConnectTitle = "Connection Information";
-
-    Dimension   origin = new Dimension(0, 0);
-
-    JButton     fetchButton;
-    JButton     showConnectionInfoButton;
-
-    JPanel      connectionPanel;
-    JFrame      frame; // The query/results window.
-
-    JLabel      userNameLabel;
-    JTextField  userNameField;
-    JLabel      passwordLabel;
-    JTextField  passwordField;
+    static String ConnectTitle = "Connection Information";
+    Dimension origin = new Dimension(0, 0);
+    JButton fetchButton;
+    JButton showConnectionInfoButton;
+    JPanel connectionPanel;
+    JFrame frame; // The query/results window.
+    JLabel userNameLabel;
+    JTextField userNameField;
+    JLabel passwordLabel;
+    JTextField passwordField;
     // JLabel      queryLabel;
-    JTextArea   queryTextArea;
-    JComponent  queryAggregate;
-    JLabel      serverLabel;
-    JTextField  serverField;
-    JLabel      driverLabel;
-    JTextField  driverField;
-
-    JPanel      mainPanel;
-
+    JTextArea queryTextArea;
+    JComponent queryAggregate;
+    JLabel serverLabel;
+    JTextField serverField;
+    JLabel driverLabel;
+    JTextField driverField;
+    JPanel mainPanel;
     TableSorter sorter;
     JDBCAdapter dataBase;
     JScrollPane tableAggregate;
@@ -85,14 +98,15 @@
      * If the user clicks on the 'Connect' button the connection is reset.
      */
     void activateConnectionDialog() {
-        if(JOptionPane.showOptionDialog(tableAggregate, connectionPanel, ConnectTitle,
-                   JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
-                   null, ConnectOptionNames, ConnectOptionNames[0]) == 0) {
+        if (JOptionPane.showOptionDialog(tableAggregate, connectionPanel,
+                ConnectTitle,
+                JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
+                null, ConnectOptionNames, ConnectOptionNames[0]) == 0) {
             connect();
             frame.setVisible(true);
+        } else if (!frame.isVisible()) {
+            System.exit(0);
         }
-        else if(!frame.isVisible())
-            System.exit(0);
     }
 
     /**
@@ -102,21 +116,21 @@
     public void createConnectionDialog() {
         // Create the labels and text fields.
         userNameLabel = new JLabel("User name: ", JLabel.RIGHT);
-        userNameField = new JTextField("guest");
+        userNameField = new JTextField("app");
 
         passwordLabel = new JLabel("Password: ", JLabel.RIGHT);
-        passwordField = new JTextField("trustworthy");
+        passwordField = new JTextField("app");
 
         serverLabel = new JLabel("Database URL: ", JLabel.RIGHT);
-        serverField = new JTextField("jdbc:sybase://dbtest:1455/pubs2");
+        serverField = new JTextField("jdbc:derby://localhost:1527/sample");
 
         driverLabel = new JLabel("Driver: ", JLabel.RIGHT);
-        driverField = new JTextField("connect.sybase.SybaseDriver");
+        driverField = new JTextField("org.apache.derby.jdbc.ClientDriver");
 
 
         connectionPanel = new JPanel(false);
         connectionPanel.setLayout(new BoxLayout(connectionPanel,
-                                                BoxLayout.X_AXIS));
+                BoxLayout.X_AXIS));
 
         JPanel namePanel = new JPanel(false);
         namePanel.setLayout(new GridLayout(0, 1));
@@ -145,22 +159,22 @@
         // Create the buttons.
         showConnectionInfoButton = new JButton("Configuration");
         showConnectionInfoButton.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    activateConnectionDialog();
-                }
+
+            public void actionPerformed(ActionEvent e) {
+                activateConnectionDialog();
             }
-        );
+        });
 
         fetchButton = new JButton("Fetch");
         fetchButton.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    fetch();
-                }
+
+            public void actionPerformed(ActionEvent e) {
+                fetch();
             }
-        );
+        });
 
         // Create the query text area and label.
-        queryTextArea = new JTextArea("SELECT * FROM titles", 25, 25);
+        queryTextArea = new JTextArea("SELECT * FROM APP.CUSTOMER", 25, 25);
         queryAggregate = new JScrollPane(queryTextArea);
         queryAggregate.setBorder(new BevelBorder(BevelBorder.LOWERED));
 
@@ -178,7 +192,12 @@
         // Create a Frame and put the main panel in it.
         frame = new JFrame("TableExample");
         frame.addWindowListener(new WindowAdapter() {
-            public void windowClosing(WindowEvent e) {System.exit(0);}});
+
+            @Override
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
         frame.setBackground(Color.lightGray);
         frame.getContentPane().add(mainPanel);
         frame.pack();
@@ -189,13 +208,13 @@
     }
 
     public void connect() {
-       dataBase = new JDBCAdapter(
-            serverField.getText(),
-            driverField.getText(),
-            userNameField.getText(),
-            passwordField.getText());
-       sorter.setModel(dataBase);
-   }
+        dataBase = new JDBCAdapter(
+                serverField.getText(),
+                driverField.getText(),
+                userNameField.getText(),
+                passwordField.getText());
+        sorter.setModel(dataBase);
+    }
 
     public void fetch() {
         dataBase.executeQuery(queryTextArea.getText());
@@ -221,25 +240,48 @@
     }
 
     public static void main(String s[]) {
+        // Trying to set Nimbus look and feel
+        try {
+            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+                if ("Nimbus".equals(info.getName())) {
+                    UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        } catch (Exception ex) {
+            Logger.getLogger(TableExample.class.getName()).log(Level.SEVERE,
+                    "Failed to apply Nimbus look and feel", ex);
+        }
+
         new TableExample();
     }
 
-    public Dimension preferredLayoutSize(Container c){return origin;}
-    public Dimension minimumLayoutSize(Container c){return origin;}
-    public void addLayoutComponent(String s, Component c) {}
-    public void removeLayoutComponent(Component c) {}
+    public Dimension preferredLayoutSize(Container c) {
+        return origin;
+    }
+
+    public Dimension minimumLayoutSize(Container c) {
+        return origin;
+    }
+
+    public void addLayoutComponent(String s, Component c) {
+    }
+
+    public void removeLayoutComponent(Component c) {
+    }
+
     public void layoutContainer(Container c) {
         Rectangle b = c.getBounds();
         int topHeight = 90;
         int inset = 4;
-        showConnectionInfoButton.setBounds(b.width-2*inset-120, inset, 120, 25);
-        fetchButton.setBounds(b.width-2*inset-120, 60, 120, 25);
+        showConnectionInfoButton.setBounds(b.width - 2 * inset - 120, inset, 120,
+                25);
+        fetchButton.setBounds(b.width - 2 * inset - 120, 60, 120, 25);
         // queryLabel.setBounds(10, 10, 100, 25);
-        queryAggregate.setBounds(inset, inset, b.width-2*inset - 150, 80);
+        queryAggregate.setBounds(inset, inset, b.width - 2 * inset - 150, 80);
         tableAggregate.setBounds(new Rectangle(inset,
-                                               inset + topHeight,
-                                               b.width-2*inset,
-                                               b.height-2*inset - topHeight));
+                inset + topHeight,
+                b.width - 2 * inset,
+                b.height - 2 * inset - topHeight));
     }
-
 }
--- a/src/share/demo/jfc/TableExample/TableExample2.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/TableExample2.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,28 +29,36 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.Dimension;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+
 
 /**
  * A minimal example, using the JTable to view data from a database.
  *
  * @author Philip Milne
  */
-
-import javax.swing.*;
-
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.Dimension;
-
 public class TableExample2 {
 
     public TableExample2(String URL, String driver, String user,
-                         String passwd, String query) {
+            String passwd, String query) {
         JFrame frame = new JFrame("Table");
         frame.addWindowListener(new WindowAdapter() {
-            public void windowClosing(WindowEvent e) {System.exit(0);}});
+
+            @Override
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
         JDBCAdapter dt = new JDBCAdapter(URL, driver, user, passwd);
         dt.executeQuery(query);
 
@@ -68,9 +76,26 @@
     public static void main(String[] args) {
         if (args.length != 5) {
             System.err.println("Needs database parameters eg. ...");
-            System.err.println("java TableExample2 \"jdbc:sybase://dbtest:1455/pubs2\" \"connect.sybase.SybaseDriver\" guest trustworthy \"select * from titles\"");
+            System.err.println(
+                    "java TableExample2 \"jdbc:derby://localhost:1527/sample\" "
+                    + "org.apache.derby.jdbc.ClientDriver app app "
+                    + "\"select * from app.customer\"");
             return;
         }
+
+        // Trying to set Nimbus look and feel
+        try {
+            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+                if ("Nimbus".equals(info.getName())) {
+                    UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        } catch (Exception ex) {
+            Logger.getLogger(TableExample2.class.getName()).log(Level.SEVERE,
+                    "Failed to apply Nimbus look and feel", ex);
+        }
+
         new TableExample2(args[0], args[1], args[2], args[3], args[4]);
     }
 }
--- a/src/share/demo/jfc/TableExample/TableExample3.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/TableExample3.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,8 +29,17 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
+
+import javax.swing.*;
+import javax.swing.table.*;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.Dimension;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.UIManager.LookAndFeelInfo;
+
 
 /**
  * An example showing the JTable with a dataModel that is not derived
@@ -39,70 +48,92 @@
  *
  * @author Philip Milne
  */
-
-import javax.swing.*;
-import javax.swing.table.*;
-
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.Dimension;
-
 public class TableExample3 {
 
     public TableExample3() {
         JFrame frame = new JFrame("Table");
         frame.addWindowListener(new WindowAdapter() {
-            public void windowClosing(WindowEvent e) {System.exit(0);}});
+
+            @Override
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
 
         // Take the dummy data from SwingSet.
-        final String[] names = {"First Name", "Last Name", "Favorite Color",
-                                "Favorite Number", "Vegetarian"};
+        final String[] names = { "First Name", "Last Name", "Favorite Color",
+            "Favorite Number", "Vegetarian" };
         final Object[][] data = {
-            {"Mark", "Andrews", "Red", new Integer(2), Boolean.TRUE},
-            {"Tom", "Ball", "Blue", new Integer(99), Boolean.FALSE},
-            {"Alan", "Chung", "Green", new Integer(838), Boolean.FALSE},
-            {"Jeff", "Dinkins", "Turquois", new Integer(8), Boolean.TRUE},
-            {"Amy", "Fowler", "Yellow", new Integer(3), Boolean.FALSE},
-            {"Brian", "Gerhold", "Green", new Integer(0), Boolean.FALSE},
-            {"James", "Gosling", "Pink", new Integer(21), Boolean.FALSE},
-            {"David", "Karlton", "Red", new Integer(1), Boolean.FALSE},
-            {"Dave", "Kloba", "Yellow", new Integer(14), Boolean.FALSE},
-            {"Peter", "Korn", "Purple", new Integer(12), Boolean.FALSE},
-            {"Phil", "Milne", "Purple", new Integer(3), Boolean.FALSE},
-            {"Dave", "Moore", "Green", new Integer(88), Boolean.FALSE},
-            {"Hans", "Muller", "Maroon", new Integer(5), Boolean.FALSE},
-            {"Rick", "Levenson", "Blue", new Integer(2), Boolean.FALSE},
-            {"Tim", "Prinzing", "Blue", new Integer(22), Boolean.FALSE},
-            {"Chester", "Rose", "Black", new Integer(0), Boolean.FALSE},
-            {"Ray", "Ryan", "Gray", new Integer(77), Boolean.FALSE},
-            {"Georges", "Saab", "Red", new Integer(4), Boolean.FALSE},
-            {"Willie", "Walker", "Phthalo Blue", new Integer(4), Boolean.FALSE},
-            {"Kathy", "Walrath", "Blue", new Integer(8), Boolean.FALSE},
-            {"Arnaud", "Weber", "Green", new Integer(44), Boolean.FALSE}
+            { "Mark", "Andrews", "Red", new Integer(2), Boolean.TRUE },
+            { "Tom", "Ball", "Blue", new Integer(99), Boolean.FALSE },
+            { "Alan", "Chung", "Green", new Integer(838), Boolean.FALSE },
+            { "Jeff", "Dinkins", "Turquois", new Integer(8), Boolean.TRUE },
+            { "Amy", "Fowler", "Yellow", new Integer(3), Boolean.FALSE },
+            { "Brian", "Gerhold", "Green", new Integer(0), Boolean.FALSE },
+            { "James", "Gosling", "Pink", new Integer(21), Boolean.FALSE },
+            { "David", "Karlton", "Red", new Integer(1), Boolean.FALSE },
+            { "Dave", "Kloba", "Yellow", new Integer(14), Boolean.FALSE },
+            { "Peter", "Korn", "Purple", new Integer(12), Boolean.FALSE },
+            { "Phil", "Milne", "Purple", new Integer(3), Boolean.FALSE },
+            { "Dave", "Moore", "Green", new Integer(88), Boolean.FALSE },
+            { "Hans", "Muller", "Maroon", new Integer(5), Boolean.FALSE },
+            { "Rick", "Levenson", "Blue", new Integer(2), Boolean.FALSE },
+            { "Tim", "Prinzing", "Blue", new Integer(22), Boolean.FALSE },
+            { "Chester", "Rose", "Black", new Integer(0), Boolean.FALSE },
+            { "Ray", "Ryan", "Gray", new Integer(77), Boolean.FALSE },
+            { "Georges", "Saab", "Red", new Integer(4), Boolean.FALSE },
+            { "Willie", "Walker", "Phthalo Blue", new Integer(4), Boolean.FALSE },
+            { "Kathy", "Walrath", "Blue", new Integer(8), Boolean.FALSE },
+            { "Arnaud", "Weber", "Green", new Integer(44), Boolean.FALSE }
         };
 
         // Create a model of the data.
+        @SuppressWarnings("serial")
         TableModel dataModel = new AbstractTableModel() {
             // These methods always need to be implemented.
-            public int getColumnCount() { return names.length; }
-            public int getRowCount() { return data.length;}
-            public Object getValueAt(int row, int col) {return data[row][col];}
+
+            public int getColumnCount() {
+                return names.length;
+            }
+
+            public int getRowCount() {
+                return data.length;
+            }
+
+            public Object getValueAt(int row, int col) {
+                return data[row][col];
+            }
 
             // The default implementations of these methods in
             // AbstractTableModel would work, but we can refine them.
-            public String getColumnName(int column) {return names[column];}
-            public Class getColumnClass(int col) {return getValueAt(0,col).getClass();}
-            public boolean isCellEditable(int row, int col) {return (col==4);}
+            @Override
+            public String getColumnName(int column) {
+                return names[column];
+            }
+
+            @Override
+            public Class getColumnClass(int col) {
+                return getValueAt(0, col).getClass();
+            }
+
+            @Override
+            public boolean isCellEditable(int row, int col) {
+                return (col == 4);
+            }
+
+            @Override
             public void setValueAt(Object aValue, int row, int column) {
                 data[row][column] = aValue;
             }
-         };
+        };
 
-        // Instead of making the table display the data as it would normally with:
+        // Instead of making the table display the data as it would normally
+        // with:
         // JTable tableView = new JTable(dataModel);
-        // Add a sorter, by using the following three lines instead of the one above.
-        TableSorter  sorter = new TableSorter(dataModel);
-        JTable    tableView = new JTable(sorter);
+        // Add a sorter, by using the following three lines instead of the one
+        // above.
+        TableSorter sorter = new TableSorter(dataModel);
+        JTable tableView = new JTable(sorter);
         sorter.addMouseListenerToHeaderInTable(tableView);
 
         JScrollPane scrollpane = new JScrollPane(tableView);
@@ -114,6 +145,18 @@
     }
 
     public static void main(String[] args) {
+        // Trying to set Nimbus look and feel
+        try {
+            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+                if ("Nimbus".equals(info.getName())) {
+                    UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        } catch (Exception ex) {
+            Logger.getLogger(TableExample3.class.getName()).log(Level.SEVERE,
+                    "Failed to apply Nimbus look and feel", ex);
+        }
         new TableExample3();
     }
 }
--- a/src/share/demo/jfc/TableExample/TableExample4.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/TableExample4.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,8 +29,18 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
+
+import javax.swing.*;
+import javax.swing.table.*;
+import javax.swing.border.*;
+import java.awt.Dimension;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.Color;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.UIManager.LookAndFeelInfo;
+
 
 /**
  * Another JTable example, showing how column attributes can be refined
@@ -40,72 +50,91 @@
  *
  * @author Philip Milne
  */
-
-import javax.swing.*;
-import javax.swing.table.*;
-import javax.swing.border.*;
-
-import java.awt.Dimension;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.Color;
-
 public class TableExample4 {
 
     public TableExample4() {
         JFrame frame = new JFrame("Table");
         frame.addWindowListener(new WindowAdapter() {
-            public void windowClosing(WindowEvent e) {System.exit(0);}});
+
+            @Override
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
 
         // Take the dummy data from SwingSet.
-        final String[] names = {"First Name", "Last Name", "Favorite Color",
-                                "Favorite Number", "Vegetarian"};
+        final String[] names = { "First Name", "Last Name", "Favorite Color",
+            "Favorite Number", "Vegetarian" };
         final Object[][] data = {
-            {"Mark", "Andrews", "Red", new Integer(2), Boolean.TRUE},
-            {"Tom", "Ball", "Blue", new Integer(99), Boolean.FALSE},
-            {"Alan", "Chung", "Green", new Integer(838), Boolean.FALSE},
-            {"Jeff", "Dinkins", "Turquois", new Integer(8), Boolean.TRUE},
-            {"Amy", "Fowler", "Yellow", new Integer(3), Boolean.FALSE},
-            {"Brian", "Gerhold", "Green", new Integer(0), Boolean.FALSE},
-            {"James", "Gosling", "Pink", new Integer(21), Boolean.FALSE},
-            {"David", "Karlton", "Red", new Integer(1), Boolean.FALSE},
-            {"Dave", "Kloba", "Yellow", new Integer(14), Boolean.FALSE},
-            {"Peter", "Korn", "Purple", new Integer(12), Boolean.FALSE},
-            {"Phil", "Milne", "Purple", new Integer(3), Boolean.FALSE},
-            {"Dave", "Moore", "Green", new Integer(88), Boolean.FALSE},
-            {"Hans", "Muller", "Maroon", new Integer(5), Boolean.FALSE},
-            {"Rick", "Levenson", "Blue", new Integer(2), Boolean.FALSE},
-            {"Tim", "Prinzing", "Blue", new Integer(22), Boolean.FALSE},
-            {"Chester", "Rose", "Black", new Integer(0), Boolean.FALSE},
-            {"Ray", "Ryan", "Gray", new Integer(77), Boolean.FALSE},
-            {"Georges", "Saab", "Red", new Integer(4), Boolean.FALSE},
-            {"Willie", "Walker", "Phthalo Blue", new Integer(4), Boolean.FALSE},
-            {"Kathy", "Walrath", "Blue", new Integer(8), Boolean.FALSE},
-            {"Arnaud", "Weber", "Green", new Integer(44), Boolean.FALSE}
+            { "Mark", "Andrews", "Red", new Integer(2), Boolean.TRUE },
+            { "Tom", "Ball", "Blue", new Integer(99), Boolean.FALSE },
+            { "Alan", "Chung", "Green", new Integer(838), Boolean.FALSE },
+            { "Jeff", "Dinkins", "Turquois", new Integer(8), Boolean.TRUE },
+            { "Amy", "Fowler", "Yellow", new Integer(3), Boolean.FALSE },
+            { "Brian", "Gerhold", "Green", new Integer(0), Boolean.FALSE },
+            { "James", "Gosling", "Pink", new Integer(21), Boolean.FALSE },
+            { "David", "Karlton", "Red", new Integer(1), Boolean.FALSE },
+            { "Dave", "Kloba", "Yellow", new Integer(14), Boolean.FALSE },
+            { "Peter", "Korn", "Purple", new Integer(12), Boolean.FALSE },
+            { "Phil", "Milne", "Purple", new Integer(3), Boolean.FALSE },
+            { "Dave", "Moore", "Green", new Integer(88), Boolean.FALSE },
+            { "Hans", "Muller", "Maroon", new Integer(5), Boolean.FALSE },
+            { "Rick", "Levenson", "Blue", new Integer(2), Boolean.FALSE },
+            { "Tim", "Prinzing", "Blue", new Integer(22), Boolean.FALSE },
+            { "Chester", "Rose", "Black", new Integer(0), Boolean.FALSE },
+            { "Ray", "Ryan", "Gray", new Integer(77), Boolean.FALSE },
+            { "Georges", "Saab", "Red", new Integer(4), Boolean.FALSE },
+            { "Willie", "Walker", "Phthalo Blue", new Integer(4), Boolean.FALSE },
+            { "Kathy", "Walrath", "Blue", new Integer(8), Boolean.FALSE },
+            { "Arnaud", "Weber", "Green", new Integer(44), Boolean.FALSE }
         };
 
         // Create a model of the data.
+        @SuppressWarnings("serial")
         TableModel dataModel = new AbstractTableModel() {
             // These methods always need to be implemented.
-            public int getColumnCount() { return names.length; }
-            public int getRowCount() { return data.length;}
-            public Object getValueAt(int row, int col) {return data[row][col];}
+
+            public int getColumnCount() {
+                return names.length;
+            }
+
+            public int getRowCount() {
+                return data.length;
+            }
+
+            public Object getValueAt(int row, int col) {
+                return data[row][col];
+            }
 
             // The default implementations of these methods in
             // AbstractTableModel would work, but we can refine them.
-            public String getColumnName(int column) {return names[column];}
-            public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
-            public boolean isCellEditable(int row, int col) {return true;}
+            @Override
+            public String getColumnName(int column) {
+                return names[column];
+            }
+
+            @Override
+            public Class getColumnClass(int c) {
+                return getValueAt(0, c).getClass();
+            }
+
+            @Override
+            public boolean isCellEditable(int row, int col) {
+                return true;
+            }
+
+            @Override
             public void setValueAt(Object aValue, int row, int column) {
                 System.out.println("Setting value to: " + aValue);
                 data[row][column] = aValue;
             }
-         };
+        };
 
         // Create the table
         JTable tableView = new JTable(dataModel);
-        // Turn off auto-resizing so that we can set column sizes programmatically.
-        // In this mode, all columns will get their preferred widths, as set blow.
+        // Turn off auto-resizing so that we can set column sizes
+        // programmatically. In this mode, all columns will get their preferred
+        // widths, as set blow.
         tableView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
         // Create a combo box to show that you can use one in a table.
@@ -123,15 +152,18 @@
         colorColumn.setCellEditor(new DefaultCellEditor(comboBox));
 
         // Set a pink background and tooltip for the Color column renderer.
-        DefaultTableCellRenderer colorColumnRenderer = new DefaultTableCellRenderer();
+        DefaultTableCellRenderer colorColumnRenderer =
+                new DefaultTableCellRenderer();
         colorColumnRenderer.setBackground(Color.pink);
         colorColumnRenderer.setToolTipText("Click for combo box");
         colorColumn.setCellRenderer(colorColumnRenderer);
 
         // Set a tooltip for the header of the colors column.
         TableCellRenderer headerRenderer = colorColumn.getHeaderRenderer();
-        if (headerRenderer instanceof DefaultTableCellRenderer)
-            ((DefaultTableCellRenderer)headerRenderer).setToolTipText("Hi Mom!");
+        if (headerRenderer instanceof DefaultTableCellRenderer) {
+            ((DefaultTableCellRenderer) headerRenderer).setToolTipText(
+                    "Hi Mom!");
+        }
 
         // Set the width of the "Vegetarian" column.
         TableColumn vegetarianColumn = tableView.getColumn("Vegetarian");
@@ -139,9 +171,14 @@
 
         // Show the values in the "Favorite Number" column in different colors.
         TableColumn numbersColumn = tableView.getColumn("Favorite Number");
-        DefaultTableCellRenderer numberColumnRenderer = new DefaultTableCellRenderer() {
+        @SuppressWarnings("serial")
+        DefaultTableCellRenderer numberColumnRenderer
+                = new DefaultTableCellRenderer() {
+
+            @Override
             public void setValue(Object value) {
-                int cellValue = (value instanceof Number) ? ((Number)value).intValue() : 0;
+                int cellValue = (value instanceof Number) ? ((Number) value).
+                        intValue() : 0;
                 setForeground((cellValue > 30) ? Color.black : Color.red);
                 setText((value == null) ? "" : value.toString());
             }
@@ -160,6 +197,19 @@
     }
 
     public static void main(String[] args) {
+        // Trying to set Nimbus look and feel
+        try {
+            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+                if ("Nimbus".equals(info.getName())) {
+                    UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        } catch (Exception ex) {
+            Logger.getLogger(TableExample4.class.getName()).log(Level.SEVERE,
+                    "Failed to apply Nimbus look and feel", ex);
+        }
+
         new TableExample4();
     }
 }
--- a/src/share/demo/jfc/TableExample/TableMap.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/TableMap.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,8 +29,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
 
 /**
  * In a chain of data manipulators some behaviour is common. TableMap
@@ -41,32 +39,34 @@
  * a TableMap which has not been subclassed into a chain of table filters
  * should have no effect.
  *
- * @author Philip Milne */
-
+ * @author Philip Milne
+ */
 import javax.swing.table.*;
 import javax.swing.event.TableModelListener;
 import javax.swing.event.TableModelEvent;
 
-public class TableMap extends AbstractTableModel implements TableModelListener
-{
+
+@SuppressWarnings("serial")
+public class TableMap extends AbstractTableModel implements TableModelListener {
+
     protected TableModel model;
 
-    public TableModel  getModel() {
+    public TableModel getModel() {
         return model;
     }
 
-    public void  setModel(TableModel model) {
+    public void setModel(TableModel model) {
         this.model = model;
         model.addTableModelListener(this);
     }
 
     // By default, Implement TableModel by forwarding all messages
     // to the model.
-
     public Object getValueAt(int aRow, int aColumn) {
         return model.getValueAt(aRow, aColumn);
     }
 
+    @Override
     public void setValueAt(Object aValue, int aRow, int aColumn) {
         model.setValueAt(aValue, aRow, aColumn);
     }
@@ -79,16 +79,19 @@
         return (model == null) ? 0 : model.getColumnCount();
     }
 
+    @Override
     public String getColumnName(int aColumn) {
         return model.getColumnName(aColumn);
     }
 
+    @Override
     public Class getColumnClass(int aColumn) {
         return model.getColumnClass(aColumn);
     }
 
+    @Override
     public boolean isCellEditable(int row, int column) {
-         return model.isCellEditable(row, column);
+        return model.isCellEditable(row, column);
     }
 //
 // Implementation of the TableModelListener interface,
--- a/src/share/demo/jfc/TableExample/TableSorter.java	Wed Mar 30 08:54:08 2011 -0700
+++ b/src/share/demo/jfc/TableExample/TableSorter.java	Wed Mar 30 08:58:02 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,8 +29,19 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- */
+
+import javax.swing.table.TableModel;
+import javax.swing.event.TableModelEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.InputEvent;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.swing.JTable;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableColumnModel;
+
 
 /**
  * A sorter for TableModels. The sorter has a model (conforming to TableModel)
@@ -48,46 +59,29 @@
  *
  * @author Philip Milne
  */
+@SuppressWarnings("serial")
+public final class TableSorter extends TableMap {
 
-import java.util.*;
-
-import javax.swing.table.TableModel;
-import javax.swing.event.TableModelEvent;
-
-// Imports for picking up mouse events from the JTable.
-
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.InputEvent;
-import javax.swing.JTable;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
-
-public class TableSorter extends TableMap
-{
-    int             indexes[];
-    Vector          sortingColumns = new Vector();
-    boolean         ascending = true;
+    int indexes[];
+    List<Integer> sortingColumns = new ArrayList<Integer>();
+    boolean ascending = true;
     int compares;
 
-    public TableSorter()
-    {
+    public TableSorter() {
         indexes = new int[0]; // For consistency.
     }
 
-    public TableSorter(TableModel model)
-    {
+    public TableSorter(TableModel model) {
         setModel(model);
     }
 
+    @Override
     public void setModel(TableModel model) {
         super.setModel(model);
         reallocateIndexes();
     }
 
-    public int compareRowsByColumn(int row1, int row2, int column)
-    {
+    public int compareRowsByColumn(int row1, int row2, int column) {
         Class type = model.getColumnClass(column);
         TableModel data = model;
 
@@ -99,104 +93,100 @@
         // If both values are null return 0
         if (o1 == null && o2 == null) {
             return 0;
-        }
-        else if (o1 == null) { // Define null less than everything.
+        } else if (o1 == null) { // Define null less than everything.
             return -1;
-        }
-        else if (o2 == null) {
+        } else if (o2 == null) {
             return 1;
         }
 
-/* We copy all returned values from the getValue call in case
-an optimised model is reusing one object to return many values.
-The Number subclasses in the JDK are immutable and so will not be used in
-this way but other subclasses of Number might want to do this to save
-space and avoid unnecessary heap allocation.
-*/
-        if (type.getSuperclass() == java.lang.Number.class)
+        /* We copy all returned values from the getValue call in case
+        an optimised model is reusing one object to return many values.
+        The Number subclasses in the JDK are immutable and so will not be used
+        in this way but other subclasses of Number might want to do this to save
+        space and avoid unnecessary heap allocation.
+         */
+        if (type.getSuperclass() == java.lang.Number.class) {
+            Number n1 = (Number) data.getValueAt(row1, column);
+            double d1 = n1.doubleValue();
+            Number n2 = (Number) data.getValueAt(row2, column);
+            double d2 = n2.doubleValue();
+
+            if (d1 < d2) {
+                return -1;
+            } else if (d1 > d2) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else if (type == java.util.Date.class) {
+            Date d1 = (Date) data.getValueAt(row1, column);
+            long n1 = d1.getTime();
+            Date d2 = (Date) data.getValueAt(row2, column);
+            long n2 = d2.getTime();
+
+            if (n1 < n2) {
+                return -1;
+            } else if (n1 > n2) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else if (type == String.class) {
+            String s1 = (String) data.getValueAt(row1, column);
+            String s2 = (String) data.getValueAt(row2, column);
+            int result = s1.compareTo(s2);
+
+            if (result < 0) {
+                return -1;
+            } else if (result > 0) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else if (type == Boolean.class) {
+            Boolean bool1 = (Boolean) data.getValueAt(row1, column);
+            boolean b1 = bool1.booleanValue();
+            Boolean bool2 = (Boolean) data.getValueAt(row2, column);
+            boolean b2 = bool2.booleanValue();
+
+            if (b1 == b2) {
+                return 0;
+            } else if (b1) // Define false < true
             {
-                Number n1 = (Number)data.getValueAt(row1, column);
-                double d1 = n1.doubleValue();
-                Number n2 = (Number)data.getValueAt(row2, column);
-                double d2 = n2.doubleValue();
+                return 1;
+            } else {
+                return -1;
+            }
+        } else {
+            Object v1 = data.getValueAt(row1, column);
+            String s1 = v1.toString();
+            Object v2 = data.getValueAt(row2, column);
+            String s2 = v2.toString();
+            int result = s1.compareTo(s2);
 
-                if (d1 < d2)
-                    return -1;
-                else if (d1 > d2)
-                    return 1;
-                else
-                    return 0;
+            if (result < 0) {
+                return -1;
+            } else if (result > 0) {
+                return 1;
+            } else {
+                return 0;
             }
-        else if (type == java.util.Date.class)
-            {
-                Date d1 = (Date)data.getValueAt(row1, column);
-                long n1 = d1.getTime();
-                Date d2 = (Date)data.getValueAt(row2, column);
-                long n2 = d2.getTime();
-
-                if (n1 < n2)
-                    return -1;
-                else if (n1 > n2)
-                    return 1;
-                else return 0;
-            }
-        else if (type == String.class)
-            {
-                String s1 = (String)data.getValueAt(row1, column);
-                String s2    = (String)data.getValueAt(row2, column);
-                int result = s1.compareTo(s2);
-
-                if (result < 0)
-                    return -1;
-                else if (result > 0)
-                    return 1;
-                else return 0;
-            }
-        else if (type == Boolean.class)
-            {
-                Boolean bool1 = (Boolean)data.getValueAt(row1, column);
-                boolean b1 = bool1.booleanValue();
-                Boolean bool2 = (Boolean)data.getValueAt(row2, column);
-                boolean b2 = bool2.booleanValue();
-
-                if (b1 == b2)
-                    return 0;
-                else if (b1) // Define false < true
-                    return 1;
-                else
-                    return -1;
-            }
-        else
-            {
-                Object v1 = data.getValueAt(row1, column);
-                String s1 = v1.toString();
-                Object v2 = data.getValueAt(row2, column);
-                String s2 = v2.toString();
-                int result = s1.compareTo(s2);
-
-                if (result < 0)
-                    return -1;
-                else if (result > 0)
-                    return 1;
-                else return 0;
-            }
+        }
     }
 
-    public int compare(int row1, int row2)
-    {
+    public int compare(int row1, int row2) {
         compares++;
-        for(int level = 0; level < sortingColumns.size(); level++)
-            {
-                Integer column = (Integer)sortingColumns.elementAt(level);
-                int result = compareRowsByColumn(row1, row2, column.intValue());
-                if (result != 0)
-                    return ascending ? result : -result;
+        for (int level = 0; level < sortingColumns.size(); level++) {
+            Integer column = sortingColumns.get(level);
+            int result = compareRowsByColumn(row1, row2, column.intValue());
+            if (result != 0) {
+                return ascending ? result : -result;
             }
+        }
         return 0;
     }
 
-    public void  reallocateIndexes()
-    {
+    public void reallocateIndexes() {
         int rowCount = model.getRowCount();
 
         // Set up a new array of indexes with the right number of elements
@@ -204,39 +194,38 @@
         indexes = new int[rowCount];
 
         // Initialise with the identity mapping.
-        for(int row = 0; row < rowCount; row++)
+        for (int row = 0; row < rowCount; row++) {
             indexes[row] = row;
+        }
     }
 
-    public void tableChanged(TableModelEvent e)
-    {
+    @Override
+    public void tableChanged(TableModelEvent e) {
         System.out.println("Sorter: tableChanged");
         reallocateIndexes();
 
         super.tableChanged(e);
     }
 
-    public void checkModel()
-    {
+    public void checkModel() {
         if (indexes.length != model.getRowCount()) {
             System.err.println("Sorter not informed of a change in model.");
         }
     }
 
-    public void  sort(Object sender)
-    {
+    public void sort(Object sender) {
         checkModel();
 
         compares = 0;
         // n2sort();
         // qsort(0, indexes.length-1);
-        shuttlesort((int[])indexes.clone(), indexes, 0, indexes.length);
-        System.out.println("Compares: "+compares);
+        shuttlesort(indexes.clone(), indexes, 0, indexes.length);
+        System.out.println("Compares: " + compares);
     }
 
     public void n2sort() {
-        for(int i = 0; i < getRowCount(); i++) {
-            for(int j = i+1; j < getRowCount(); j++) {
+        for (int i = 0; i < getRowCount(); i++) {
+            for (int j = i + 1; j < getRowCount(); j++) {
                 if (compare(indexes[i], indexes[j]) == -1) {
                     swap(i, j);
                 }
@@ -255,7 +244,7 @@
         if (high - low < 2) {
             return;
         }
-        int middle = (low + high)/2;
+        int middle = (low + high) / 2;
         shuttlesort(to, from, low, middle);
         shuttlesort(to, from, middle, high);
 
@@ -277,20 +266,17 @@
         find out how the performance drops to Nlog(N) as the initial
         order diminishes - it may drop very quickly.  */
 
-        if (high - low >= 4 && compare(from[middle-1], from[middle]) <= 0) {
-            for (int i = low; i < high; i++) {
-                to[i] = from[i];
-            }
+        if (high - low >= 4 && compare(from[middle - 1], from[middle]) <= 0) {
+            System.arraycopy(from, low, to, low, high - low);
             return;
         }
 
         // A normal merge.
 
-        for(int i = low; i < high; i++) {
+        for (int i = low; i < high; i++) {
             if (q >= high || (p < middle && compare(from[p], from[q]) <= 0)) {
                 to[i] = from[p++];
-            }
-            else {
+            } else {
                 to[i] = from[q++];
             }
         }
@@ -304,15 +290,14 @@
 
     // The mapping only affects the contents of the data rows.
     // Pass all requests to these rows through the mapping array: "indexes".
-
-    public Object getValueAt(int aRow, int aColumn)
-    {
+    @Override
+    public Object getValueAt(int aRow, int aColumn) {
         checkModel();
         return model.getValueAt(indexes[aRow], aColumn);
     }
 
-    public void setValueAt(Object aValue, int aRow, int aColumn)
-    {
+    @Override
+    public void setValueAt(Object aValue, int aRow, int aColumn) {
         checkModel();
         model.setValueAt(aValue, indexes[aRow], aColumn);
     }
@@ -323,8 +308,8 @@
 
     public void sortByColumn(int column, boolean ascending) {
         this.ascending = ascending;
-        sortingColumns.removeAllElements();
-        sortingColumns.addElement(new Integer(column));
+        sortingColumns.clear();
+        sortingColumns.add(column);
         sort(this);
         super.tableChanged(new TableModelEvent(this));
     }
@@ -337,22 +322,21 @@
         final JTable tableView = table;
         tableView.setColumnSelectionAllowed(false);
         MouseAdapter listMouseListener = new MouseAdapter() {
+
+            @Override
             public void mouseClicked(MouseEvent e) {
                 TableColumnModel columnModel = tableView.getColumnModel();
                 int viewColumn = columnModel.getColumnIndexAtX(e.getX());
                 int column = tableView.convertColumnIndexToModel(viewColumn);
-                if(e.getClickCount() == 1 && column != -1) {
+                if (e.getClickCount() == 1 && column != -1) {
                     System.out.println("Sorting ...");
-                    int shiftPressed = e.getModifiers()&InputEvent.SHIFT_MASK;
+                    int shiftPressed = e.getModifiers() & InputEvent.SHIFT_MASK;
                     boolean ascending = (shiftPressed == 0);
                     sorter.sortByColumn(column, ascending);
                 }
-             }
-         };
+            }
+        };
         JTableHeader th = tableView.getTableHeader();
         th.addMouseListener(listMouseListener);
     }
-
-
-
 }