Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > SWT/JFace
SWT/JFace Forum d'entraide pour les API SWT/JFace. Avant de poster -> FAQ SWT/JFace
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 16h56   #1
FuRiOuZ
Invité régulier
 
Homme
Inscription : octobre 2012
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2012
Messages : 11
Points : 5
Points : 5
Par défaut Listener sur un clic enfoncé

Bonjour,

J'ai un bouton qui parcourt les nœuds d'un treeviewer mais l'arbre étant assez grand, ça devient vite fatiguant de cliquer constamment.
J'ai essayé un bout de code de ce genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Button ButtonSuivant = new Button(parent, SWT.PUSH);
ButtonSuivant.setText("Suivant");
ButtonSuivant.addMouseListener(new MouseListener() {
	@Override
	public void mouseDoubleClick(MouseEvent e) {
	    // TODO Auto-generated method stub
 
	}
	@Override
	public void mouseDown(MouseEvent e) {
	    // TODO Auto-generated method stub
            while (mouseDown) {
	        NoeudSuivant();
	    }
	}
	@Override
	public void mouseUp(MouseEvent e) {
	    // TODO Auto-generated method stub
 
	}
});
Mais bon comme on peut s'en douter ça me met juste une boucle infinie. Je me demande si on peut passer par le mouseUp en lui disant que tant que l'action n'est pas enclenchée, tu peux continuer de parcourir les noeuds suivants.
J'ai vu aussi qu'il y avait un mousePressed en AWT mais je n'ai pas trouvé d'équivalent en SWT.
Enfin bref, je suis bloqué donc si quelqu'un a une idée .

Merci d'avance
FuRiOuZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2013, 12h04   #2
freelibre
Membre du Club
 
Avatar de freelibre
 
Inscription : février 2005
Messages : 61
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2005
Messages : 61
Points : 60
Points : 60
Par défaut Mise en place de Timer

Tu peut mettre un Timer de x seconde dans ton MouseDown attente que le temps s'écoule pour exécuter ton code et entre temps si tu as le MouseUp tu tue ton Timer
__________________
Le Partage est notre Force !
freelibre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2013, 11h37   #3
FuRiOuZ
Invité régulier
 
Homme
Inscription : octobre 2012
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2012
Messages : 11
Points : 5
Points : 5
Par mettre un timer tu sous-entends que si je clic une fois sur le bouton l'action va s'effectuer pendant tant de seconde ?
Ça peut être utile mais dans le cas présent ce n'est pas ce dont j'ai besoin. La dans mon arbre je parcours les nœuds un par un. Si je passe par un timer et non simplement en restant enfoncé sur le bouton certains nœuds vont être sautés.
Ou alors je n'ai pas compris ce que tu me conseil.
FuRiOuZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2013, 09h36   #4
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 1 567
Points : 3 430
Points : 3 430
Salut,

Voilà un exemple d'implémentation à partir d'un snippet JFace sur un ListViewer. L'interface est moche, le code est moche, mais c'est un exemple fait vite fait. Le plus intéressant reste la logique d'utilisation du timer:
Code :
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
 
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
 
/**
 * Demonstrate a simple ListViewer
 */
public class Snippet039ListViewer {
 
  public class InnerTimer extends TimerTask {
 
    /**
     * {@inheritDoc}
     */
    @Override
    public void run() {
      if (viewer != null && !viewer.getControl().isDisposed()) {
        Display.getDefault().asyncExec(new Runnable() {
          @Override
          public void run() {
            final ISelection iSelection = viewer.getSelection();
            if (iSelection instanceof IStructuredSelection) {
              final Object iFirstElement =
                ((IStructuredSelection) iSelection).getFirstElement();
              final Object iInput = viewer.getInput();
              if (iFirstElement instanceof MyModel
                  && iInput instanceof MyModel[]) {
                final List<MyModel> iModelList =
                  Arrays.asList((MyModel[]) iInput);
                final int iIndexOf = iModelList.indexOf(iFirstElement);
                int iNext = iIndexOf + 1;
                if (iNext == iModelList.size()) {
                  iNext = 0;
                }
                final MyModel iSelected = iModelList.get(iNext);
                viewer.setSelection(new StructuredSelection(iSelected));
                viewer.reveal(iSelected);
              }
            }
          }
        });
      }
    }
  }
 
  public class MyModel {
    public int counter;
 
    public MyModel(final int counter) {
      this.counter = counter;
    }
 
    @Override
    public String toString() {
      return "Item " + this.counter;
    }
  }
 
  /**
   * The viewer.
   */
  private final ListViewer viewer;
 
  public Snippet039ListViewer(final Shell shell) {
    viewer = new ListViewer(shell, SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setLabelProvider(new LabelProvider());
    viewer.setContentProvider(ArrayContentProvider.getInstance());
    final MyModel[] model = createModel();
    viewer.setInput(model);
  }
 
  /**
   * @param args
   */
  public static void main(final String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    final Snippet039ListViewer iSnippet039ListViewer =
      new Snippet039ListViewer(shell);
    final Button iButton = new Button(shell, SWT.PUSH);
    iButton.setText("Next");
    iButton.addMouseListener(new MouseAdapter() {
 
      private Timer nextTimer;
 
      /**
       * {@inheritDoc}
       */
      @Override
      public void mouseDown(final MouseEvent aEvent) {
        nextTimer = new Timer();
        nextTimer.schedule(iSnippet039ListViewer.new InnerTimer(), new Date(),
            300);
      }
 
      /**
       * {@inheritDoc}
       */
      @Override
      public void mouseUp(final MouseEvent aEvent) {
        nextTimer.cancel();
      }
    });
 
    shell.open();
 
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
 
    display.dispose();
  }
 
  private MyModel[] createModel() {
    final MyModel[] elements = new MyModel[100];
 
    for (int i = 0; i < 100; i++) {
      elements[i] = new MyModel(i);
    }
 
    return elements;
  }
}
Voilà, à+
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2013, 17h12   #5
FuRiOuZ
Invité régulier
 
Homme
Inscription : octobre 2012
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2012
Messages : 11
Points : 5
Points : 5
Bonjour,

Désolé pour l'éveil tardif et merci pour la réponse. Ça m'a été utile même si finalement je m'en suis servi mais pour autre chose.

Pour ceux que ça intéresse y'a ce tuto qui aide dans ce domaine : http://www.vogella.com/articles/Ecli...lipsejobs_jobs


Voila, bon codage.
FuRiOuZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h20.


 
 
 
 
Partenaires

Hébergement Web