IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

SWT contenu d'une cellule


Sujet :

SWT/JFace Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut SWT contenu d'une cellule
    Bonjour,
    J'ai un tableau que je remplis d'éléments divers, et je voudrais récupérer l'event double click sur une ligne de mon tableau (j'ai utilisé SWT.FULL_SELECTION) pour lancer une méthode qui me fera pop une autre fenêtre. Or j'ai une erreur.

    Voilà le morceau de code concerné :
    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
    public class GuiSWT {
    	ModeXML toto = new ModeXML();
    	static Display display = new Display();
    	Shell shell = new Shell(display, SWT.RESIZE | SWT.CLOSE | SWT.MIN );
    	public void mainWindow()
    	{
    		int k = 0;
    		Table table = new Table(shell, SWT.FULL_SELECTION);
    		String[] blabla;
    		toto.initXML();
    		String[] titles = { "UserName", "Id" };
    		 table.setHeaderVisible(true);
    	    for (int loopIndex = 0; loopIndex < titles.length; loopIndex++) {
    	      TableColumn column = new TableColumn(table, SWT.NULL);
    	      column.setText(titles[loopIndex]);
    	    }
    		while ((blabla = toto.displayXML(k)) != null)
    		{
    			TableItem item = new TableItem(table, SWT.NULL);
    			item.setText(new String[]{blabla[0], blabla[1]});
    			System.out.println(blabla[0]);
    			System.out.println(blabla[1]);
    			k++;
    		}
    		for (int loopIndex1 = 0; loopIndex1 < titles.length; loopIndex1++) {
    		      table.getColumn(loopIndex1).pack();
    		}
    		table.pack();
    		shell.pack();
    		table.addListener(SWT.MouseDoubleClick, new Listener() {
    			public void handleEvent(Event event) {
    				TableItem item = (TableItem)event.item;
    				System.out.println(item.getText(0));
    				secondWindow();
    				
    			}
    		});
    		shell.open();
    		while (!shell.isDisposed())
    		{
    			if (!display.readAndDispatch())
    				display.sleep();
    		}
    	}
    J'essaye de récuperer le contenu de la ligne sur laquelle on double click et de l'afficher, mais ca plante pendant l'éxecution (au moment ou je double click):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Exception in thread "main" java.lang.NullPointerException
    	at GuiSWT$1.handleEvent(GuiSWT.java:48)
    	at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    	at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    	at GuiSWT.mainWindow(GuiSWT.java:56)
    	at FirstWindow.main(FirstWindow.java:13)
    J'ai mis en rouge la ligne 56.
    Merci d'avance.
    Cordialement,
    Bdloul

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    J'ai résolu le programme en récupérant X et Y de mon curseur de souris au moment du doube click, mais je suis curieux de savoir s'il y a une approche plus simple. SWT me parait un peu trop compliqué pour ce qu'il est.

  3. #3
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    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 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Je te conseille de passer par un TableViewer de JFace. D'ailleurs, il vaut mieux passer par JFace plutôt que par SWT, JFace étant plus orienté objet.
    Voici un exemple complet (inspiré d'un Snippet JFace) qui montre comment faire pour récupérer la sélection lors du double clic:
    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
    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
    import org.eclipse.jface.layout.TableColumnLayout;
    import org.eclipse.jface.viewers.ArrayContentProvider;
    import org.eclipse.jface.viewers.ColumnLabelProvider;
    import org.eclipse.jface.viewers.ColumnWeightData;
    import org.eclipse.jface.viewers.DoubleClickEvent;
    import org.eclipse.jface.viewers.IDoubleClickListener;
    import org.eclipse.jface.viewers.ISelection;
    import org.eclipse.jface.viewers.IStructuredSelection;
    import org.eclipse.jface.viewers.TableViewer;
    import org.eclipse.jface.viewers.TableViewerColumn;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.MessageBox;
    import org.eclipse.swt.widgets.Shell;
     
    /**
     * A simple TableViewer to demonstrate usage
     * 
     * @author Tom Schindl <tom.schindl@bestsolution.at>
     * 
     */
    public class SnippetTableViewer {
     
    	public class MyModel {
    		private int identifier;
    		private String name;
     
    		public MyModel(String pName, int pIdentifier) {
    			this.identifier = pIdentifier;
    			this.name = pName;
    		}
     
    		public int getIdentifier() {
    			return identifier;
    		}
     
    		public String getName() {
    			return name;
    		}
    	}
     
    	public SnippetTableViewer(final Shell shell) {
    		Composite myComposite = new Composite(shell, SWT.NONE);
    		TableColumnLayout layout = new TableColumnLayout();
    		myComposite.setLayout(layout);
    		final TableViewer v = new TableViewer(myComposite);
    		v.setContentProvider(ArrayContentProvider.getInstance());
    		MyModel[] model = createModel();
     
    		TableViewerColumn columnName = new TableViewerColumn(v, SWT.NONE);
    		columnName.getColumn().setText("Name");
    		columnName.setLabelProvider(new ColumnLabelProvider() {
    			@Override
    			public String getText(Object element) {
    				String text = super.getText(element);
    				if (element instanceof MyModel) {
    					text = ((MyModel) element).getName();
    				}
    				return text;
    			}
    		});
    		layout.setColumnData(columnName.getColumn(), new ColumnWeightData(2));
     
    		TableViewerColumn columnId = new TableViewerColumn(v, SWT.NONE);
    		columnId.getColumn().setText("Id");
    		columnId.setLabelProvider(new ColumnLabelProvider() {
    			@Override
    			public String getText(Object element) {
    				String text = super.getText(element);
    				if (element instanceof MyModel) {
    					text = String.valueOf(((MyModel) element).getIdentifier());
    				}
    				return text;
    			}
    		});
    		layout.setColumnData(columnId.getColumn(), new ColumnWeightData(1));
    		v.setInput(model);
    		v.getTable().setLinesVisible(true);
    		v.getTable().setHeaderVisible(true);
    		v.addDoubleClickListener(new IDoubleClickListener() {
     
    			@Override
    			public void doubleClick(DoubleClickEvent event) {
    				ISelection selection = event.getSelection();
    				if (selection instanceof IStructuredSelection) {
    					Object selectedObject = ((IStructuredSelection) selection).getFirstElement();
    					if (selectedObject instanceof MyModel) {
    						MessageBox box = new MessageBox(shell, SWT.ICON_INFORMATION);
    						box.setText("Objet sélectionné");
    						box.setMessage("Vous avez sélectionné : " + ((MyModel) selectedObject).getName() + ", il porte l'identifiant: "
    								+ ((MyModel) selectedObject).getIdentifier());
    						box.open();
    					}
    				}
    			}
    		});
    	}
     
    	private MyModel[] createModel() {
    		MyModel[] elements = new MyModel[10];
     
    		for (int i = 0; i < 10; i++) {
    			elements[i] = new MyModel("Mr Name #" + i, i);
    		}
     
    		return elements;
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Display display = new Display();
    		Shell shell = new Shell(display);
    		shell.setLayout(new FillLayout());
    		new SnippetTableViewer(shell);
    		shell.open();
     
    		while (!shell.isDisposed()) {
    			if (!display.readAndDispatch()) {
    				display.sleep();
    			}
    		}
    		display.dispose();
    	}
    }
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    Je suis en stage, je n'ai pas le choix de la techno. J'ai finalement utilisé un table tout bête avec SWT.FULL_SELECTION.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 13/04/2006, 15h35
  2. [VBA-E]contenu d'une cellule gestion erreur macro
    Par matou_aouh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/03/2006, 10h18
  3. [VBA]Copier le contenu d'une cellule d'un autre classeur
    Par dudu59 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2006, 17h08
  4. Réponses: 3
    Dernier message: 27/01/2006, 18h35
  5. Importer le contenu d'une cellule Excel vers Access
    Par deaqu1 dans le forum Access
    Réponses: 7
    Dernier message: 05/11/2005, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo