--- a/jdk/src/share/demo/jfc/TableExample/JDBCAdapter.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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
*/
-
-import java.util.Vector;
-import java.sql.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.event.TableModelEvent;
-
+@SuppressWarnings("serial")
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/jdk/src/share/demo/jfc/TableExample/OldJTable.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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/jdk/src/share/demo/jfc/TableExample/TableExample.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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.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 {
- static String[] ConnectOptionNames = { "Connect" };
- static String ConnectTitle = "Connection Information";
-
- Dimension origin = new Dimension(0, 0);
-
- JButton fetchButton;
- JButton showConnectionInfoButton;
+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;
- JPanel connectionPanel;
- JFrame frame; // The query/results window.
+
+public final class TableExample implements LayoutManager {
- JLabel userNameLabel;
- JTextField userNameField;
- JLabel passwordLabel;
- JTextField passwordField;
+ 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;
// 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/jdk/src/share/demo/jfc/TableExample/TableExample2.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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/jdk/src/share/demo/jfc/TableExample/TableExample3.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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/jdk/src/share/demo/jfc/TableExample/TableExample4.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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/jdk/src/share/demo/jfc/TableExample/TableMap.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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/jdk/src/share/demo/jfc/TableExample/TableSorter.java Wed Mar 30 08:54:08 2011 -0700
+++ b/jdk/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
*/
-
-import java.util.*;
-
-import javax.swing.table.TableModel;
-import javax.swing.event.TableModelEvent;
-
-// Imports for picking up mouse events from the JTable.
+@SuppressWarnings("serial")
+public final class TableSorter extends TableMap {
-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)
- {
- Number n1 = (Number)data.getValueAt(row1, column);
- double d1 = n1.doubleValue();
- Number n2 = (Number)data.getValueAt(row2, column);
- double d2 = n2.doubleValue();
+ /* 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 (d1 < d2)
- return -1;
- else if (d1 > d2)
- return 1;
- else
- return 0;
+ if (n1 < n2) {
+ return -1;
+ } else if (n1 > n2) {
+ 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();
+ } 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 (n1 < n2)
- return -1;
- else if (n1 > n2)
- return 1;
- else return 0;
+ if (result < 0) {
+ return -1;
+ } else if (result > 0) {
+ return 1;
+ } else {
+ return 0;
}
- else if (type == String.class)
+ } 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
{
- 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;
+ return 1;
+ } else {
+ return -1;
}
- 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();
+ } 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 (b1 == b2)
- return 0;
- else if (b1) // Define false < true
- return 1;
- else
- return -1;
+ if (result < 0) {
+ return -1;
+ } else if (result > 0) {
+ return 1;
+ } else {
+ return 0;
}
- 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);
}
-
-
-
}