Bonjour à tous,
On m'a posé une question qui peut sembler simple mais sur le coup je n'ai pas eu d'inspiration.
Voila j'ai un tableau ou je peux selectionner des lignes (on va simplifier) de manière non contigue si je ne m'abuse.
Cependant je ne vois pas comment retrouver la list de lignes selectionnée dans l'ordre de la selection et non celle de l'index "minimum" vers l'index "maximum".
Je joints un mini-exemple.
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 package snippet; import javax.swing.JTable; public class TableItself extends JTable { /** * */ private static final long serialVersionUID = 3396414462575957687L; public TableItself() { super(new Object[][]{ {0, "CHAT"}, {1, "CHIEN"}, {2, "MOUTON"}, {3, "BOEUF"}, }, new Object[]{"Id", "Nom"}); getSelectionModel().addListSelectionListener(arg0 -> { int[] vals = getSelectedRows(); System.err.println("\r\n\r\nSELECTION REFRESH"); for (int i = 0; i < vals.length; i++) { System.err.print("Index row : "+vals[i]); System.err.println(" -> "+getModel().getValueAt(vals[i], 1)); } }); } }Si par exemple je selectionne d'abord "MOUTON" (en maintenant control) puis "CHIEN" puis "CHAT" je n'arrive a recuperer que
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 package snippet; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JScrollPane; import javax.swing.JTable; public class TableSelectionTest extends JFrame { /** * */ private static final long serialVersionUID = 5258365124724701007L; private JPanel contentPane; private JScrollPane scrollPane; private JTable table; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TableSelectionTest frame = new TableSelectionTest(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public TableSelectionTest() { initialize(); } private void initialize() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); contentPane.add(getScrollPane(), BorderLayout.CENTER); } private JScrollPane getScrollPane() { if (scrollPane == null) { scrollPane = new JScrollPane(); scrollPane.setViewportView(getTable()); } return scrollPane; } private JTable getTable() { if (table == null) { table = new TableItself(); } return table; } }
"CHAT", "CHIEN", "MOUTON"
hors ce n'est pas l'ordre de ma séléction.
Une idée ?
(La même question pourrait se poser aussi pour un JList à mon avis).
Partager