Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Mouse Listener not getting fired for JTable row header.

843806Sep 15 2008 — edited Sep 17 2008
Problem:
Mouse Listener not getting fired.
Description:
I have a data in JTable where there is one column of date time and it is in the following format "Mon Aug 04 17:59:45 IST 2008". I want to sort the data in the JTable but using the default sorter is not working for me as it is a string based sorter which I do not for the data time column. Hence I am trying to add a mouse listener to the table row header. But when I am clicking the header the mouse click event is not getting fired. I am at a loss as to why this is happening. The code is too big to be uploaded on the forum as it contains 4 class. If need please give me your mail Id will send the code to you.

Here is the code which I have shorted.
Class TableMan.java (The main class to evoke the table)
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class TableMan {
  private TableUI _tableUI = null;
  
  public TableMan() {
    // TODO Auto-generated constructor stub
  }

  /**
   * @param args
   */
  public static void main(String[] args) {
    TableMan obj = new TableMan();
    obj.createAndDisplayUI();
  }
  
  public void createAndDisplayUI(){
    TableUI tableUI = new TableUI();
    _tableUI = tableUI;
    ActionListener action = this.getActionListener();
    tableUI.createAndDisplayTableUI();
    JButton cancelButton = _tableUI.getCancelButton();
    cancelButton.addActionListener(action);
  }

  private ActionListener getActionListener() {
    return new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        _tableUI.setCursor(new Cursor(Cursor.WAIT_CURSOR));
        try {
          if(e.getActionCommand().equals("Cancel")) {
            _tableUI.removeAll();
            _tableUI.dispose();
            _tableUI = null;
          }
        }catch (Exception exception){
          
        }finally{
          if(_tableUI != null){
            _tableUI.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
          }
        }
      }
    };
  }

}
Class TableTableModel.java
import java.awt.event.ItemListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.table.*;

class TableTableModel extends AbstractTableModel {
  private Object[] _columns;
  private Object[][] _cellData;
  private TableUI _tableUI;
  
  public TableTableModel(Object[] columns, Object[][] data, TableUI tableUI){
    _columns = columns;
    _cellData = data;
    _tableUI = tableUI;
  }
  
  public int getColumnCount() {
    return _columns.length;
  }

  public Class<?> getColumnClass(int columnIndex) {
    return _cellData[0][columnIndex].getClass();
  }
  
  public int getRowCount() {
    return _cellData.length;
  }
  
  public Object getValueAt (int rowIndex, int columnIndex){
    return _cellData[rowIndex][columnIndex];
  }
  
  @Override
  public String getColumnName(int column) {
    return _columns[column].toString();
  }

  @Override
  public boolean isCellEditable(int rowIndex, int columnIndex) {
    return (columnIndex == 0);
  }

  @Override
  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    _cellData[rowIndex][columnIndex] = aValue;
    fireTableCellUpdated(rowIndex, columnIndex);
    _tableUI.setNSelectedRows((Boolean)aValue);
  }
  
}
Class Table.java
import javax.swing.*;
import javax.swing.table.*;

public class Table extends JTable {
  public Table(AbstractTableModel model){
    super(model);
    TableColumnModel tableModel = this.getColumnModel();
    if (model.getColumnCount() == 3) {
      tableModel.getColumn(0).setPreferredWidth(15);
      tableModel.getColumn(1).setPreferredWidth(200);
      tableModel.getColumn(2).setPreferredWidth(200);
    }
    
    this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    this.setBounds(10, 10, 400, 180);
    this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  }

}
Main UI Class TableUI.java
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class TableUI extends JFrame {
  private Object[] columnHeaders  = { "", "Date Time", "Result"};
  private Table    rowheadertable = null;
  private Table    datatable      = null;
  private JButton  cancel         = null;
  private int      _nSelectedRows;

  private Object[][] inputs = {
      {"Mon Aug 04 17:59:45 IST 2008","UNKNOWN"},
      {"Mon Jul 28 15:38:27 IST 2008","UNKNOWN"},
      {"Thu Aug 28 13:06:48 IST 2008","FAILED"},
      {"Thu Aug 28 13:07:33 IST 2008","PASSED"},
      {"Thu Jul 31 15:17:01 IST 2008","UNKNOWN"},
      {"Tue Jul 22 15:21:21 IST 2008","UNKNOWN"},
      {"Tue Jul 22 15:21:41 IST 2008","UNKNOWN"}          
  };

  public TableUI() {
    Dimension maxSize = new Dimension(570,300);
    this.setMinimumSize(maxSize);
    this.setMaximumSize(maxSize);
    this.setSize(maxSize);
    this.setResizable(false);
  }
  
  public void createAndDisplayTableUI(){
    this.setAlwaysOnTop(true);
    JPanel tablePanel = new JPanel();
    tablePanel.setBounds(10, 10, 545, 180);
    tablePanel.setLayout(new BorderLayout());
    Object[][] _rowData = new Object[inputs.length][columnHeaders.length];
    
    for (int i = 0; i < inputs.length;i++){
      _rowData[0] = false;
this.setTitle("Checking");
_rowData[i][1] = inputs[i][0];
_rowData[i][2] = inputs[i][1];
}

TableTableModel model = new TableTableModel(columnHeaders,_rowData, this);
rowheadertable = new Table(model);
datatable = new Table(model);
// datatable.setAutoCreateRowSorter(true);


TableColumnModel columnModel = rowheadertable.getColumnModel();
TableColumn selectColumn = columnModel.getColumn(0);
selectColumn.setCellEditor(new DefaultCellEditor(new JCheckBox()));
while (rowheadertable.getColumnCount() > 1){
columnModel.removeColumn(columnModel.getColumn(1));
}

TableColumnModel dataColumnModel = datatable.getColumnModel();
dataColumnModel.removeColumn(dataColumnModel.getColumn(dataColumnModel.getColumnIndex("")));
DefaultTableCellRenderer cellrenderer = new DefaultTableCellRenderer();
cellrenderer.setHorizontalAlignment(JLabel.CENTER);
dataColumnModel.getColumn(dataColumnModel.getColumnIndex("Result")).setCellRenderer(cellrenderer);

JScrollPane pane = new JScrollPane();
tablePanel.add(pane,BorderLayout.CENTER);
rowheadertable.getTableHeader().setReorderingAllowed(false);
selectColumn.setPreferredWidth(15);
selectColumn.setResizable(false);
rowheadertable.setPreferredScrollableViewportSize(rowheadertable.getPreferredSize());
rowheadertable.addMouseListener(this.getColumnListener());

pane.setCorner(JScrollPane.UPPER_LEFT_CORNER, rowheadertable.getTableHeader());
pane.setRowHeaderView(rowheadertable);


JViewport port = new JViewport();
port.setView(datatable);
pane.setViewport(port);
this.getContentPane().add(tablePanel);

JPanel otherPanel = new JPanel();
otherPanel.setBounds(0, 200, 400, 100);
otherPanel.setLayout(null);

cancel = new JButton("Cancel");
cancel.setActionCommand("Cancel");
cancel.setBounds(472, 230, 80, 20);
cancel.setMnemonic(KeyEvent.VK_C);
otherPanel.add(cancel);

this.getContentPane().add(otherPanel);

this.setVisible(true);
}

private MouseAdapter getColumnListener() {
return new MouseAdapter(){
protected Vector tableData;
@Override
public void mouseClicked(MouseEvent e){
JTable t = (JTable)e.getSource();
TableColumnModel colModel = t.getColumnModel();
int columnModelIndex = colModel.getColumnIndexAtX(e.getX());
int modelIndex = colModel.getColumn(columnModelIndex).getModelIndex();

int sortCol = 0;
boolean sortAsc = true;

if (modelIndex < 0)
return;

if (sortCol == modelIndex)
sortAsc = !sortAsc;
else
sortCol = modelIndex;

for (int i = 0 ; i < rowheadertable.getColumnCount(); i++){
TableColumn column = colModel.getColumn(i);
column.setHeaderValue(rowheadertable.getColumnName(column.getModelIndex()));
}

t.getTableHeader().repaint();
for (int i = 0; i < t.getRowCount(); i++){
Object[] _rowData = new Object[columnHeaders.length];
for (int j = 0; j < columnHeaders.length; j ++){
_rowData[j] = t.getValueAt(i, j);
}
tableData.addElement(new TableData(_rowData[0].toString(),
rowData[1].toString(),rowData[2].toString(),
rowData[3].toString(),rowData[4].toString(),
_rowData[5].toString()));
}

Collections.sort(tableData, new tableComparator(modelIndex, sortAsc));
t.tableChanged(new TableModelEvent(t.getModel()));
t.repaint();
}
};
}

class TableData {
public String _checkBox;
public String _timeStamp;
public String _ruleName;
public String _evalID;
public String _status;
public String _fileName;

private TableData(String checkBox, String timeStamp, String ruleName,
String evalID, String status, String fileName) {
_checkBox = checkBox;
_timeStamp = timeStamp;
_ruleName = ruleName;
_evalID = evalID;
_status = status;
_fileName = fileName;
}
}

class tableComparator implements Comparator {
protected int _sortCol;
protected boolean _sortAsc;

public tableComparator(int sortCol, boolean sortAsc){
_sortCol = sortCol;
_sortAsc = sortAsc;
}

public int compare (Object o1, Object o2){
if(!(o1 instanceof String)|| !(o2 instanceof String))
return 0;

int result = 0;

switch (_sortCol){
case 0:
break;
case 1:
String timestamp1 = o1.toString();
String timestamp2 = o2.toString();
String tmpStore = null;
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");
Date date1 = null;
Date date2 = null;
try {
date1 = sdf.parse(timestamp1);
date2 = sdf.parse(timestamp2);
} catch (Exception ParseException){
JOptionPane.showMessageDialog(new JFrame(),
"Problem in converting the date",
"Date convertion problem.", JOptionPane.ERROR_MESSAGE);
}
if (date1.compareTo(date2) > 0){
tmpStore = timestamp1;
timestamp1 = timestamp2;
timestamp2 = tmpStore;
}
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
}
if (!_sortAsc)
result = -result;
return result;
}
}

/**
* Returns the selected rows in a table
*
* @return selected rows
*/
public void setNSelectedRows(boolean isSelected) {
if(isSelected) {
_nSelectedRows += 1;
} else {
_nSelectedRows -= 1;
}
}

public JButton getCancelButton() {
return cancel;
}

}
Edited by: Natraj_Kadur on Sep 15, 2008 11:38 AM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Oct 15 2008
Added on Sep 15 2008
4 comments
270 views