Bonjour,

Je suis un petit problème, j’utilise une JTable qui se rafraichi environ toutes les 0.5 secondes, cette JTable contient la liste des processus qui tournent sur mon PC.
J’ai simplement ajouter un MouseListener à cette JTable pour pouvoir créer un JPopupMenu, cependant vu quelle se refraichit tous le temps j’ai une expection Invalide Index…
Voici le code de ma classe Table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 supervisionApp.ihm.view;
 
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
 
import org.jdesktop.swingx.JXTable;
 
public class Table extends JPanel {
 
	private static final long serialVersionUID = -2739124138805812437L;
 
	private JPopupMenu popupMenu = null;
	private JMenuItem menuItemKillProcess = null;
	private JTable table = null;
 
	public Table() {
		initComponents();
	}
 
	private void initComponents() {
		setLayout(new BorderLayout());
		table = new JXTable();
		JScrollPane scrollPane = new JScrollPane(table);
		add(scrollPane, BorderLayout.CENTER);
 
		table.addMouseListener(new MouseListener() {
 
			@Override
			public void mouseReleased(MouseEvent e) {
			}
 
			@Override
			public void mousePressed(MouseEvent e) {
			}
 
			@Override
			public void mouseExited(MouseEvent e) {
			}
 
			@Override
			public void mouseEntered(MouseEvent e) {
			}
 
			@Override
			public void mouseClicked(MouseEvent e) {
				//if (isAdmin) {
					if (SwingUtilities.isRightMouseButton(e)) {
						if (popupMenu == null) {
							createJPopupMenu();
						}
						int selectedRow = table.getSelectedRow();
						if (selectedRow != -1) {
 
							String processName = (String) table.getValueAt(selectedRow, 0);
							System.out.println("processName = " + processName);
							popupMenu.show(e.getComponent(), e.getX(), e.getY());
						} else {
							System.out.println("selectedRow = " + selectedRow);
						}
					}
				}
			//}
		});
	}
 
	private void createJPopupMenu() {
		popupMenu = new JPopupMenu();
		menuItemKillProcess = new JMenuItem("Kill process");
		menuItemKillProcess.setIcon(new ImageIcon("icons\\human-skull.png"));
 
		popupMenu.add(menuItemKillProcess);
 
		menuItemKillProcess.addActionListener(new ActionListener() {
 
			@Override
			public void actionPerformed(ActionEvent e) {
 
			}
		});
	}
 
	public void setModel(final AbstractTableModel model) {
		table.setModel(model);
	}
}
Merci d'avance !