Hello,
J'ai une JTable auquelle est associée un AbstractTableModel. J'ai un JComboBox qui me permet de sélectionner différents tableaux de donnés censés remplir la table.
Ces tableaux sont dans une HashMap. On accède à un tableau par la valeur (String port) de ma JComboBox. A l'initialisation chaque tableau est identique (initialisé par le tableau "data")
Mon problème se situe au niveau de la modification d'un tableau de la HasMap.
Je modifie le tableau correspondant à la clé souhaitée, mais tous les tableaux de ma HashMap sont modifiés ...
P.S: le refresh de ma JTable en fonction du tableau en paramètre d'entrée fonctionne.
Voilà mon code :
- création de la HashMap
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 private static final String data[][] = { {"bit7", ANALOG, NO_IT}, {"bit6", ANALOG, NO_IT}, {"bit5", ANALOG, NO_IT}, {"bit4", ANALOG, NO_IT}, {"bit3", ANALOG, NO_IT}, {"bit2", ANALOG, NO_IT}, {"bit1", ANALOG, NO_IT}, {"bit0", ANALOG, NO_IT}, }; private void createHashMapPortsDatas(int portsNumber) { datasPortsMap = new HashMap<String, String[][]>(); String[] portsLabel = {PORT_A, PORT_B, PORT_C, PORT_D, PORT_E, PORT_F}; for (int i = 0; i < portsNumber; i++) { String[][] dataHash = new String[8][3]; dataHash = data; datasPortsMap.put(portsLabel[i], dataHash); } }
- écriture d'un élément de la table (selon valeur comboBox : port)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public void fillInTable(String port, String text, int numBit, int colomn) { int index = Convert.numBitToIndex(numBit); /* get datas saved in HashMap */ String newDatas[][] = datasPortsMap.get(port); newDatas[index][colomn] = text; datasPortsMap.put(port, newDatas); myJTable.refresh(newDatas); }
- ma classe qui dérive JTable et son model :
merci beaucou
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 package com.st.graphics; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import java.awt.Container; import java.awt.Dimension; public class MyJTable extends JPanel{ private boolean DEBUG = false; private MyTableModel model; public MyJTable(String[] col, Object[][] datas) { model = new MyTableModel(col, datas); JTable table = new JTable(model); table.setPreferredScrollableViewportSize(new Dimension(700, 100)); //Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); //Add the scroll pane to this panel. add(scrollPane); } public void refresh(Object[][] datas) { model.setData(datas); } public MyTableModel getModel() { return model; } class MyTableModel extends AbstractTableModel { private String[] columnNames ; private Object[][] data ; public MyTableModel (String[] col, Object[][] datas) { this.columnNames = col; this.data = datas; } public int getColumnCount() { return columnNames.length; } public int getRowCount() { return data.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { return data[row][col]; } public void setData(Object[][] newData){ data = newData; super.fireTableDataChanged(); } [...] }
Partager