Bonjour,

J'ai un tabbedPane initialisé par un JTree (les branches cliquées importent des tabs dans le tabbedPane). Dans chaque Tab j'ai des JPanel contenant des JTables.

Les données du JTree arrivent d'un autre programme ( transfert XML...) et j'aimerais effectuer un refresh (lors d'un appui sur un bouton) de ces tabs même lorsqu'elles sont ouvertes. Le refresh marche mais si la Tab est ouverte et qu'elle a été modifiée, l'affichage lui ne l'est pas. je dois alors fermer la tab et la reouvrir.

J'utilise pourtant la méthode fireTableDataChanged() mais je dois mal l’implémenter, voilà ce que je fais en gros (une partie du code est retire pour plus de clarté) :

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
public class aveStatusTablePanel extends JPanel {
 
    private JTable table;
    private DefaultTableModel tableModel;
    private JButton deleteButton;
    private int minNbrOfRows = 0;
    private int initialNbrOfRows = 2;
    private JLabel elementLabel = null;
    private aveComboBoxCellRenderer comboRenderer[];
    private static final Matcher TWO_DIM_TABLE = Pattern.compile("(?s)^\\(\\s*\\[.*\\]\\s*\\)").matcher("");
 
 
    public aveStatusTablePanel(String[] header) {
 
    private void initStatusTablePanel(String[] header) {
 
        Object[][] data = {};
        int dimension = header.length;
 
        // Create empty table (rows are added dynamically)
        tableModel = new DefaultTableModel(data, header);
        table = new JTable(tableModel);
        table.setDefaultRenderer(Object.class, new aveTableCellRenderer());
        // Usually editing is not terminated if the focus is lost, change this!
        table.putClientProperty("terminateEditOnFocusLost", true);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
        // Pack table
        aveTableCustom.packColumns(table, 25);
        aveTableCustom.packRows(table, 0);
        // Embed table into scroll pane
        aveTableScrollPane tableScroll = new aveTableScrollPane(table);
 
        // Layout is BorderLayout
        this.setLayout(new BorderLayout());
 
        // Give any resize space to table
        this.add(tableScroll, BorderLayout.CENTER);
    }
 
    public void refresh() {
 
        tableModel.fireTableDataChanged();
        table.setModel(tableModel);
        JScrollPane scrollPane = new JScrollPane(table);
        this.add(scrollPane, CENTER_ALIGNMENT);
    }
}
Ca c'est pour la classe qui crée les JPanels de mes Tabs.
Le refresh général se fait dans une autre fonction, voila le code :
Secret (cliquez pour afficher)
Code : Java - Sélectionner
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
public boolean refreshResultStatus() {
        // Success of refreshing
        boolean success = true;
        DOMTree domTree = getDOMTree();
        Stack<Integer> toBeDeleted = new Stack<Integer>();
        for (int i = 0; i < tabbedPane.getTabCount(); i++) {
            String funcDef = getFunction((JPanel) tabbedPane.getComponentAt(i)).replaceFirst(";$", "");
            Map<String, String> paramMap = aveScanFormat.scanFunction(funcDef);
            String funcType = paramMap.get("funcType");
 
            TreeNode funcDefNode = getFuncNode(domTree, funcType);
            if (funcDefNode == null || resultsNodeIsDisabled(domTree, funcDefNode, funcType)) {
                toBeDeleted.push(i);
                success = false;
            }
            // Function is valid, update StatusPanel
            aveStatusTablePanel StatusPanel = (aveStatusTablePanel) getPanelParameter(i, "status");
            StatusPanel.refresh();
        }
        // Delete invalid contents, if there are any
        while (!toBeDeleted.empty()) {
            tabbedPane.remove(toBeDeleted.pop());
        }
        // update corresponding status panel AFTER all functions have been processed
        updateStatus();
        return success;
    }
Je pense ne pas être loin de la solution mais je bloque un peu.

Quelqu'un saurait-il m'expliquer comment procéder ?

Je vous en remercie d'avance.