JTable; Comment coder un listener pour accepter Double click et simple click
Bonjour,
J'ai un problème pour gérer soit un simple click soit un double click sur une JTable.
J'ai défini le listener suivant ;
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Table = new JTable();
Table.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent me)
{
if (me.getClickCount() == 1)System.out.println("Simple click " );
else System.out.println("Double click " );
}
}); |
Dans ce cas, même si je double clique rapidement, le Listener considère qu'il n'y a qu'un seul clic . Par contre deux clics successifs mais pas rapides, me permettent d'éditer la cellule.
Maintenant, si je définis ma table comme suit :
Code:
1 2 3 4 5 6 7 8 9
|
Table = new JTable(
{
private static final long serialVersionUID = 1L;
public boolean editCellAt(int row, int column, java.util.EventObject e)
{
return false;
}
}; |
alors, cette fois je peux différencier un double clics d'un simple clic, mais je ne peux plus éditer la cellule pour en changer le contenu.
Dans un forum, j'ai vu que l'utilisation d'un Timer devrait me permettre d'y arriver, mais je n'arrive pas à m'en sortir.. Sans doute ai-je oublié quelque chose.
Pourquoi fais-je ceci ?
Dans le cas d'un double clic, je supprime la ligne, dans le cas d'un simple clic, je veux changer le contenu de la cellule.
Pour l 'instant pour pallier le problème, j'ai ajouté une colonne que je renseigne si je veux supprimer la ligne, mais je n'aime pas beaucoup cette solution.
Merci pour toutes suggestions. Mon code complet est ci-dessous.
Gégé
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
package test;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
public class Exemple extends JDialog
{
private static final long serialVersionUID = 1L;
private JTable Table = null;
private DefaultTableModel modelTable = null;
private JScrollPane scrollTable = null;
private javax.swing.JButton Terminer = null;
public Exemple()
{
super();
initialisation();
}
private void initialisation()()
{
setSize(585, 419);
getRootPane().setBorder( BorderFactory.createLineBorder(Color.RED) );
javax.swing.JPanel ContentPane= new javax.swing.JPanel();
ContentPane.setName("ContentPane");
ContentPane.setLayout(null);
Terminer = new javax.swing.JButton();
Terminer.setName("Terminer");
Terminer.setText("Terminer");
Terminer.setBounds(199, 305, 91, 25);
Terminer.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});
Table = new JTable();
/*
{
private static final long serialVersionUID = 1L;
public boolean editCellAt(int row, int column, java.util.EventObject e)
{
return false;
}
};
*/
Table.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent me)
{
if (me.getClickCount() == 1)System.out.println("Simple click " );
else System.out.println("Double click " );
}
});
scrollTable= new JScrollPane();
scrollTable.setViewportView(Table);
scrollTable.setBounds(40, 90, 472, 175);
scrollTable.setViewportView(Table);
ContentPane.setBackground(java.awt.Color.black);
ContentPane.add(Terminer, Terminer.getName());
ContentPane.add(scrollTable);
setContentPane(ContentPane);
execute();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private void execute()
{
Object[] tableHeader = new Object[]{"mes valeurs"};
modelTable = new DefaultTableModel(tableHeader, 0);
modelTable.setRowCount(10);
modelTable.setColumnCount(1);
Table.setModel(modelTable);
JTableHeader header = Table.getTableHeader();
header.setBackground(java.awt.Color.yellow);
Table.setRowHeight(20);
Table.setShowGrid(true);
for (int i=0;i<3 ; i++) modelTable.insertRow(i, new Object[]{" Ligne " + i, });
}
public static void main(java.lang.String[] args)
{
new Exemple( ).execute();;
}
} |