Comment trapper un evenement MouseEvent issu de javax.swing.plaf.basic.BasicTableUI$Handler
 
Bonjour,
Dans un cas particulier , apres un clic dans une cellule g=E9r=E9e par
JTable , j'ai une exception issu du
handler de la table .
J'aimerai pourvoir etre capable de trapper cet evenement avant qu'il
soit pris en compte par le handler de la table
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(Unknown
Source)
    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
ci joint le source de la classe JTableModule qui gere la table
J'esperai trapper l'=E9v=E8nement via un MouseHandler que je rajoute =E0 ma
classe JTableModule .
Je le traite mais cependant malgr=E9 le dispose() , il est quand meme
pris en compte par le BasicTableUI$Handler
D'ou ma probl=E9matique .
Trapper cet =E9v=E8nement pour identifier pourquoi la source est invalide
avant qu,il soit pris en compte par BasicTableUI$Handler
Merci
package terri.gui.table;
/*
@(#)JTableModule.java	1.17 07/10/26
*
*/
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.plaf.basic.BasicTableUI;
import terri.InvokerUI;
import terri.entities.*;
import terri.gui.MessageWindow;
import terri.managers.file.*;
import terri.utilities.*;
import java.lang.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.awt.event.*;
import java.awt.*;
import java.beans.*;
public class JTableModule extends JTable {
    JScrollPane scrollPane;
    TableColumn tableColumn0;
    final int columnWidth0 = 30;
    Logger logger;
    JTableModule jTableModule;
    TableColumnModel tableColumnModel;
    MouseListener[] mls;
    class MyTableUI extends BasicTableUI {
        public MouseInputListener createMouseInputListener() {
            return mouseHandler;
        }
    }
    MyTableUI myTableUI;
    class MouseHandler extends MouseInputAdapter {
        public void mousePressed(MouseEvent e) {
            logger.log(Level.INFO,"source =" + e.getSource().toString());
            if (!e.getComponent().isValid()) {
            	logger.log(Level.INFO,"Component Source invalid, evt
consumed");
                e.consume();
            }
            else
                super.mousePressed(e);
            logger.log(Level.INFO,"Mouse pressed (# of clicks: "
                    + e.getClickCount() + ")");
        }
        public void mouseReleased(MouseEvent e) {
            logger.log(Level.INFO,"source =" + e.getSource().toString());
            if (!e.getComponent().isValid()) {
            	logger.log(Level.INFO,"Component Source invalide, evt
consumed");
            	e.consume();
            }
            else
                super.mouseReleased(e);
            logger.log(Level.INFO,"Mouse released (# of clicks: "
                    + e.getClickCount() + ")");
        }
    }
    MouseHandler  mouseHandler;
    class ListSelectionModelTableModule extends DefaultListSelectionModel
{
        public boolean isSelectedIndex(int index) {
            boolean result;
            result=super.isSelectedIndex(index);
            if (listSelectionColumnModel.getAnchorSelectionIndex() != 0) {
                result=false;
            }
//	    	logger.log(Level.INFO,"isSelected (" + index + ") result = " +
result);
            return result;
        }
    }
    ListSelectionModelTableModule listSelectionRowModelTableModule;
    ListSelectionModel listSelectionColumnModel;
    //Default cell editor
    DefaultCellEditor cellEditor = new DefaultCellEditor(new
JTextField()) {
        public void cancelCellEditing() {
            logger.log(Level.INFO,"cancel editing");
            super.cancelCellEditing();
        }
        public boolean stopCellEditing() {
            logger.log(Level.INFO,"stop editing");
            return super.stopCellEditing();
        }
        public Component getTableCellEditorComponent(JTable table, Object
value, boolean isSelected, int row, int column){
            logger.log(Level.INFO,"getTableCellEditorComponent with value : " +
value + " row :" + row + " column :" + column);
            return super.getTableCellEditorComponent(table, value, isSelected,
row,column);
        }
    };
    // Cell renderer used by column 0 with specifics background and
foreground colors.
    DefaultTableCellRenderer col0Renderer =
    new DefaultTableCellRenderer() {
        Color beige = new Color(245, 245, 220);
        public void setValue(Object value) {
        	setBackground(beige);
            setForeground(Color.black);
        	super.setValue(value);
        }
    };
    public JTableModule(AbstractTableModel dataModel) {
        int indexMouseListener;
        //logger
   	    logger= Logger.getLogger("terri.gui.table.JTableModule");
   	    //set the common log file handler
    	logger.addHandler(InvokerUI.getCommonLogFileHandler());
        //initialize the list , index  of the model
    	logger.log(Level.INFO,"new JTableModule");
        //Affect the tableModel
        setModel(dataModel);
        logger.log(Level.INFO,"setModel");
        //Column0 specifications
        specifyColumn0();
        logger.log(Level.INFO,"specifyColumn0");
        //specific editor
        //this.setCellEditor(cellEditor);
        putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
        logger.log(Level.INFO,"putClientProperty");
        //list selection model for excel selection row behavior
        jTableModule=this;
        tableColumnModel=this.getColumnModel();
        listSelectionColumnModel=tableColumnModel.getSelectionModel();
        listSelectionRowModelTableModule= new
ListSelectionModelTableModule();
        this.setSelectionModel(listSelectionRowModelTableModule);
        //selection behavior
        this.setRowSelectionAllowed(true);
        this.setCellSelectionEnabled(true);
        this.setColumnSelectionAllowed(false);
       	//mouse Handler for TableUI
   	 	//mouseHandler=new MouseHandler();
        //this.setUI(myTableUI);
        //trap mouse events for debugging
        /*
        mouseHandler=new MouseHandler();
        mls = (MouseListener[])
(this.getListeners(MouseListener.class));
        for (indexMouseListener=0;indexMouseListener<
mls.length;indexMouseListener++)
        	this.removeMouseListener(mls[indexMouseListener]);
        this.addMouseListener(mouseHandler);
        */
        // Affect a scrollPane
        scrollPane = new JScrollPane(this);
        logger.log(Level.INFO,"fin new JTableModule");
    };
    public JScrollPane getScrollPane() { return scrollPane; }
    //render specifications for column 0
    private void specifyColumn0() {
        // max size and not resizable with gray color
        tableColumn0= this.getColumn(" ");
        tableColumn0.setMaxWidth(columnWidth0);
        tableColumn0.setResizable(false);
        tableColumn0.setCellRenderer(col0Renderer);
    }
    //special views behaviours to add
    public void tableChanged(TableModelEvent e ) {
        super.tableChanged(e);
    }
}