Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Language IDEs » Java Development Tools (JDT) » The method compareTo(Object) belongs to the raw type Comparable(what is wrong with the implementation of this compareTo() method?)
icon10.gif  The method compareTo(Object) belongs to the raw type Comparable [message #697928] Mon, 18 July 2011 11:39 Go to next message
Jonathan Camilleri is currently offline Jonathan CamilleriFriend
Messages: 91
Registered: July 2009
Member
Core Java Volume 2 (7th Edition) - which was written for JDK 1.5 - provides the following code snippet. Although I do not have psychic capabilities, it might be that Horstmann assumed, and, perhaps it was valid at the time that type erasure would eliminate the need for assigning parameter types.

I would like your guidance, and, explanation in figuring out, how to implement the compareTo() method accurately, because the automatic suggestions provided by Eclipse
IDE do not seem to be valid under JDK 1.6:

package code;

/**
@version 1.01 2004-08-22
@author Cay Horstmann
*/

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

/**
This program demonstrates how to sort a table column.
Double-click on a table columm's header to sort it.
*/
public class TableSortTest
{  
public static void main(String[] args)
{  
   JFrame frame = new TableSortFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setVisible(true);
}
}

/**
This frame contains a table of planet data.
*/
class TableSortFrame extends JFrame
{  
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
public TableSortFrame()
{  
   setTitle("TableSortTest");
   setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

   // set up table model and interpose sorter

   DefaultTableModel model = new DefaultTableModel(cells, columnNames);
   final SortFilterModel sorter = new SortFilterModel(model);

   // show table

   final JTable table = new JTable(sorter);
   add(new JScrollPane(table), BorderLayout.CENTER);

   // set up double click handler for column headers

   table.getTableHeader().addMouseListener(new 
      MouseAdapter()
      {  
         public void mouseClicked(MouseEvent event)
         {  
            // check for double click
            if (event.getClickCount() < 2) return;

            // find column of click and
            int tableColumn = table.columnAtPoint(event.getPoint());

            // translate to table model index and sort
            int modelColumn = table.convertColumnIndexToModel(tableColumn);
            sorter.sort(modelColumn);
         }
      });
}

private Object[][] cells =
{  
   { "Mercury", 2440.0,  0, false, Color.yellow },    
   { "Venus", 6052.0, 0, false, Color.yellow },
   { "Earth", 6378.0, 1, false, Color.blue },
   { "Mars", 3397.0, 2, false, Color.red },
   { "Jupiter", 71492.0, 16, true, Color.orange },
   { "Saturn", 60268.0, 18, true, Color.orange },
   { "Uranus", 25559.0, 17, true, Color.blue },
   { "Neptune", 24766.0, 8, true, Color.blue },
   { "Pluto", 1137.0, 1, false, Color.black }
};

private String[] columnNames = { "Planet", "Radius", "Moons", "Gaseous", "Color" };

private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 200;
}

/**
This table model takes an existing table model and produces a new model that sorts the rows 
so that the entries in a given column are sorted.
*/
class SortFilterModel extends AbstractTableModel
{
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
/**
   Constructs a sort filter model.
   @param m the table model whose rows should be sorted
*/
public SortFilterModel(TableModel m)
{  
   model = m;
   rows = new Row[model.getRowCount()];
   for (int i = 0; i < rows.length; i++)
   {  
      rows[i] = new Row();
      rows[i].index = i;
   }
}

/**
   Sorts the rows.
   @param c the column that should become sorted
*/
public void sort(int c)
{  
   sortColumn = c;
   Arrays.sort(rows);
   fireTableDataChanged();
}

// Compute the moved row for the three methods that access model elements

public Object getValueAt(int r, int c) { return model.getValueAt(rows[r].index, c); }

public boolean isCellEditable(int r, int c) { return model.isCellEditable(rows[r].index, c); }

public void setValueAt(Object aValue, int r, int c) 
{ 
   model.setValueAt(aValue, rows[r].index, c);
}

// delegate all remaining methods to the model

public int getRowCount() { return model.getRowCount(); }
public int getColumnCount() { return model.getColumnCount(); }
public String getColumnName(int c) { return model.getColumnName(c); }
public Class<?> getColumnClass(int c) { return model.getColumnClass(c); }

/** 
   This inner class holds the index of the model row
   Rows are compared by looking at the model row entries
   in the sort column.
*/
private class Row implements Comparable<Row>
{  
   public int index;
   @SuppressWarnings("rawtypes")
public int compareTo(Row other)
   {  
      Object a = model.getValueAt(index, sortColumn);
      Object b = model.getValueAt(other.index, sortColumn);
      if (a instanceof Comparable)
         return ((Comparable<? extends Row>) a).compareTo(b);
      else
         return a.toString().compareTo(b.toString());
   }
}

private TableModel model;
private int sortColumn;
private Row[] rows;
}


NOTE: It would be nice to have line numbers automatically implemented within
 
tags.

Related links
1. Core Java Bug List at http://www.horstmann.com/corejava/bugs.html.

[Updated on: Mon, 18 July 2011 11:40]

Report message to a moderator

Re: The method compareTo(Object) belongs to the raw type Comparable [message #699728 is a reply to message #697928] Fri, 22 July 2011 07:55 Go to previous messageGo to next message
Pal Shadi is currently offline Pal ShadiFriend
Messages: 6
Registered: July 2011
Junior Member
thanks a lot
Re: The method compareTo(Object) belongs to the raw type Comparable [message #699761 is a reply to message #699728] Fri, 22 July 2011 09:16 Go to previous message
Jonathan Camilleri is currently offline Jonathan CamilleriFriend
Messages: 91
Registered: July 2009
Member
Thanks, so how would you re-write the code?

Previous Topic:Entry point not found
Next Topic:Help Reading a Source File .java file
Goto Forum:
  


Current Time: Sat Apr 20 02:46:19 GMT 2024

Powered by FUDForum. Page generated in 0.02507 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top