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

  1. #1
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Points : 52
    Points
    52
    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 : 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,

    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
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Points : 52
    Points
    52
    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 du Club
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Points : 52
    Points
    52
    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 : 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
    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...
    Pas de questions technique par MP, les forums sont là pour ça.

  6. #6
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Points : 52
    Points
    52
    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