Bonjour,

J'ai créé une vue contenant une table SWT et des boutons comme edit.

Voici le code de la vue :
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
public class ListCountriesView extends ViewPart {
 
    public static final String ID="listcountriesview";
 
    public void createToolBar(final Composite composite)
    {      
        toolbar = new ToolBar(composite, SWT.BORDER);
        toolbar.setLayout(new FormLayout());    
 
        toolItemEdit = new ToolItem(toolbar, SWT.PUSH);
        toolItemEdit.setText("&Edit");
        toolItemEdit.addSelectionListener( new SelectionAdapter() {
 
                public void widgetSelected(SelectionEvent e) {
 
                    ApplicationWindow window = null;
                    try {
                        try {
                            window = new DialogCountries(composite.getShell());
                        } catch (FileNotFoundException e1) {
                            e1.printStackTrace();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    } catch (SQLException e1) {
                        e1.printStackTrace();
                    }
                    window.setBlockOnOpen(true);
                    window.open();            
                }
 
                public void widgetDefaultSelected(SelectionEvent e) {
                }
            });
    }
 
    @Override
    public void createPartControl(Composite parent) {
 
        parent.setLayout(new FormLayout());
        createToolBar(parent);
 
        table = new Table(parent, SWT.HIDE_SELECTION|SWT.SINGLE|SWT.FULL_SELECTION|SWT.BORDER|SWT.V_SCROLL);
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        initNameColumn = new TableColumn(table, SWT.CENTER);
        initNameColumn.setText("Name");
        initNameColumn.setWidth(200);
 
        itemDescriptionColumn = new TableColumn(table, SWT.CENTER);
        itemDescriptionColumn.setText("Description");
        itemDescriptionColumn.setWidth(320);
 
        itemCountryCodeColumn = new TableColumn(table, SWT.CENTER);
        itemCountryCodeColumn.setText("Country Code");
        itemCountryCodeColumn.setWidth(250);        
 
        requete = "SELECT * FROM c_country";    
        try {
            state = cn.createStatement();    
            request = state.executeQuery(requete);
 
            while(request.next()){
 
                String itemValue="yes";
 
                if (!request.getString("is_active").equals("T"))
                    itemValue="no";
 
                item = new TableItem(table, SWT.NONE);
                item.setText(new String[] { request.getString("name"), request.getString("description"),request.getString("countrycode")});
 
        } }catch (SQLException e) {
            e.printStackTrace();
        }finally{
             try { if (request != null) request.close(); } catch(Exception e) { }
             try { if (state != null) state.close(); } catch(Exception e) { }
        }
 
        table.addSelectionListener( new SelectionAdapter() {
 
                public void widgetSelected(SelectionEvent e) {
                    setName(table.getItem(table.getSelectionIndex()).getText());
                }
 
                public void widgetDefaultSelected(SelectionEvent e){        
                }
            });
    }
    public void setName(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
}
L'autre window contenant les champs de text:
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
public class DialogCountries extends ApplicationWindow {
 
    protected Control createContents(Composite parent1) {
 
        parent1.getShell().setText("Country");
        parent1.setLayout(new GridLayout());
        Composite parent=new Composite(parent1,SWT.NONE);
        parent.setLayout(new GridLayout(3,false));
        parent.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL|GridData.GRAB_HORIZONTAL));
 
        createLabel(parent,"Name:");
        textName=new Text(parent,SWT.BORDER);
        textName.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 
        createLabel(parent,"Country Code:");
        textCountryCode=new Text(parent,SWT.BORDER);
        textCountryCode.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));            
 
        createLabel(parent,"Description:");
        textDescription=new Text(parent,SWT.BORDER);
        textDescription.setLayoutData(new GridData(GridData.FILL,0,true,false,2,0));        
 
        // reception des données de la vue listcountriesview        
 
        IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        IViewPart findView = (IViewPart) activePage.findViewReference(ListCountriesView.ID).getView(true);
 
        if (findView != null) {
            String firstName = ((ListCountriesView)findView).getName();
            System.out.println(firstName);                                  
            textName.setText(firstName);
        } else {
            System.out.println("Instance de vue non créée");
        }        
 
        return parent1;        
    }    
}
Quand j'appuie sur le bouton edit, l'élement sélectionné de la table s'affiche dans mon DialogCountries. Si je refais cette action 10 fois il se plante.
J'aimerais comprendre où est le problème.

De plus, je souhaiterais que lorsque l'on appuie sur Save, les champs dans DialogCountries, soient stockés dans la table (dans la vue listcountriesview).
J'aimerais donc savoir comment envoyer les données du dialogCountries vers ma vue listcountriesview.

Merci d'avance pour votre aide