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 :

Mettre un bouton dans un tableau


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut Mettre un bouton dans un tableau
    Bonjour à tous,

    dans un tableau, je désire rajouter un bouton, afin de lancer un traitement sur un objet de la ligne sélectionné. Comment puis je faire ?

    Dans mon code, j'ai ceci :
    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
    { 
    myTableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
     
    Table myTable = (Table) myTableViewer .getControl();
    GridData gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
    gridData.horizontalSpan = 1;
    myTable.setLayoutData(gridData);
     
    TableLayout tableLayout = new TableLayout();
    tableLayout.addColumnData(new ColumnPixelData(100));
    // ... autres ColumnPixelData rajoutés : autant que de colonnes à gérer
    myTable.setLayout(tableLayout);
     
    myTableViewer .setContentProvider(new IStructuredContentProvider() {
    @Override
    public Object[] getElements(Object inputElement) {
    	return (NxProxyDataVO[]) inputElement;
    }
     
    @Override
    public void dispose() {}
     
    @Override
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
    });
     
    createFirstDataColumn();
    createSecondDataColumn();
    // creer autant de colonnes que necessaire
    createToUpdateColumn();
     
    myTable.setHeaderVisible(true);
    }
     
    // ... quelques lignes plus bas : 
    // exemple 
    private void createFirstDataColumn() {
    TableViewerColumn tvc = new TableViewerColumn(myTableViewer , SWT.LEFT);
    tvc.setLabelProvider(new ColumnLabelProvider() {
    	public String getText(Object element) {
    		return "" + ((ClassOfData) element).getName();
    	}
    });
     
    TableColumn tc = tvc.getColumn();
    // tc.setWidth(10);
    tc.setText("First Data");
    }
    Ici donc, quand je renseigne l'objet , il me suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myTableViewer.setInput(...)
    avec un tableau de .
    A la dernière colonne, je voudrais, non pas afficher du texte, mais un bouton sur lequel, quand je clique, m'ouvre une fenêtre à partir duquel je peux lancer un traitement. Le gros problème est que je n'arrive pas à savoir comment on met un bouton dans la colonne !!!

    Quelques bonnes âmes auraient elles des pistes de solution ? Un exemple à me donner ?

    Merci d'avance,

    Très cordialement,

  2. #2
    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 : 41
    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
    Par défaut
    Salut,

    Voilà un exemple qui te permet de faire ce que tu veux:
    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
    import org.eclipse.jface.dialogs.MessageDialog;
    import org.eclipse.jface.layout.TableColumnLayout;
    import org.eclipse.jface.viewers.ArrayContentProvider;
    import org.eclipse.jface.viewers.CellEditor;
    import org.eclipse.jface.viewers.ColumnLabelProvider;
    import org.eclipse.jface.viewers.ColumnWeightData;
    import org.eclipse.jface.viewers.DialogCellEditor;
    import org.eclipse.jface.viewers.EditingSupport;
    import org.eclipse.jface.viewers.TableViewer;
    import org.eclipse.jface.viewers.TableViewerColumn;
    import org.eclipse.jface.viewers.ViewerCell;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Control;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Table;
     
    public class Snippet38 {
     
    	public static void main(String[] args)
    	{
    		Display display = new Display();
    		Shell shell = new Shell(display);
    		shell.setLayout(new GridLayout());
     
    		Composite tableComposite = new Composite(shell, SWT.NONE);
    		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    		data.heightHint = 200;
    		tableComposite.setLayoutData(data);
    		TableColumnLayout layout = new TableColumnLayout();
    		tableComposite.setLayout(layout);
     
    		final Table table = new Table(tableComposite, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
    		TableViewer viewer = new TableViewer(table);
    		viewer.setContentProvider(ArrayContentProvider.getInstance());
    		viewer.setInput(new String[] { "Test1", "Test2" });
    		table.setLinesVisible(true);
    		table.setHeaderVisible(true);
     
    		TableViewerColumn column = new TableViewerColumn(viewer, SWT.LEFT);
    		column.getColumn().setText("Test #");
    		column.setLabelProvider(new ColumnLabelProvider() {
     
    			@Override
    			public void update(ViewerCell cell)
    			{
    				Object element = cell.getElement();
    				if (element instanceof String)
    				{
    					cell.setText((String) element);
    				}
    			}
    		});
    		layout.setColumnData(column.getColumn(), new ColumnWeightData(1));
     
    		TableViewerColumn column2 = new TableViewerColumn(viewer, SWT.LEFT);
    		column2.getColumn().setText("Button");
    		column2.setLabelProvider(new ColumnLabelProvider());
    		column2.setEditingSupport(new EditingSupport(viewer) {
     
    			private CellEditor editor;
     
    			@Override
    			protected void setValue(Object element, Object value)
    			{
    			}
     
    			@Override
    			protected Object getValue(Object element)
    			{
    				Object value = null;
    				if (editor != null)
    				{
    					value = editor.getValue();
    				}
    				return value;
    			}
     
    			@Override
    			protected CellEditor getCellEditor(Object element)
    			{
    				if (editor == null)
    				{
    					editor = new TableDialogCellEditor(table);
    				}
    				return editor;
    			}
     
    			@Override
    			protected boolean canEdit(Object element)
    			{
    				return true;
    			}
    		});
    		layout.setColumnData(column2.getColumn(), new ColumnWeightData(1));
     
    		shell.pack();
    		shell.open();
    		while (!shell.isDisposed())
    		{
    			if (!display.readAndDispatch())
    				display.sleep();
    		}
    		display.dispose();
    	}
    }
     
    class TableDialogCellEditor extends DialogCellEditor {
     
    	public TableDialogCellEditor(Composite parent) {
    		super(parent, SWT.NONE);
    	}
     
    	/**
             * {@inheritDoc}
             */
    	@Override
    	protected Object openDialogBox(Control cellEditorWindow)
    	{
    		return MessageDialog.openConfirm(getControl().getShell(), "Titre de la dialog", "Choisissez une option:");
    	}
    }
    Bon, l'exemple est simpliste mais à le mérite de faire les choses...

    Voilà, à+
    Gueritarish

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut
    Merci. Désolé du retard. Très bientôt je vais tester ta proposition ! (pour le moment je suis passé sur autre chose) Je ne manquerai pas de revenir pour dire si ça marche bien !

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut
    Merci, ça marche plutôt bien. Tel quel ou presque, je vais pouvoir l'utiliser.

    Mes seuls souçis est que j'aimerais mieux caler le bouton : il apparaît coller sur la droite de la colonne, alors que je le voudrais centrer, et qu'il prenne toute la largeur de la colonne; de plus, le bouton n'apparaît quand on est en mode "édition" sur la cellule, alors que j'aimerais qu'il apparaît aussi en mode "visualisation". Peut être jouer avec le LabelProvider ?? ...

  5. #5
    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 : 41
    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
    Par défaut
    Sinon, tu peux passer par une solution en SWT "pur". Mais pour le coup, tu perds toutes l'approche objet de JFace...
    A toi de voir ce que tu préfères.

    Une solution, dans mon cas, est d'afficher une image du bouton...

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut
    Désolé du retard, mais c'est pour dire que c'est OK ! J'ai pu me débrouiller et installer un bouton dans une cellule de tableau. Le reste, c'est du peauffinage dont je peux, pour le moment, me passer.

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

Discussions similaires

  1. mettre un jtextarea dans un tableau
    Par 7awela dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 29/04/2007, 17h01
  2. Réponses: 4
    Dernier message: 03/08/2006, 14h11
  3. Réponses: 3
    Dernier message: 05/12/2005, 02h30
  4. Mettre un bouton dans une cellule !!!!
    Par mehdi82 dans le forum Composants
    Réponses: 2
    Dernier message: 22/11/2005, 09h51
  5. Mettre un fichier dans un tableau
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 26/07/2005, 10h47

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