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 :

Ajouter une zone texte dans une View Eclipse


Sujet :

SWT/JFace Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut Ajouter une zone texte dans une View Eclipse
    Bonjour,

    Je viens d'ajouter une "view" dans mon plugin et je voudrais afficher dans cette zone le contenu d'un fichier, puis pouvoir l'éditer càd avoir une zone de texte dans l'onglet "view" que j'ai rajouté mais je sais pas comment procéder.

    Voici ce que contient ma classe :
    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
    public class LabelView extends ViewPart {
    	private Label label;
     
    	public LabelView() {
    		super();
    	}
     
    	public void setFocus() {
    		label.setFocus();
    	}
     
    	public void createPartControl(Composite parent) {
    		label = new Label(parent, 0);
    	}
    }
    Quelqu'un saurait-il m'indiquer les étapes à suivre ?

    Merci d'avance pour votre aide

  2. #2
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Salut bulldo,

    je voudrais afficher dans cette zone un contenu d'un fichier et puis pouvoir l'édite
    Pour ton cas, le mieux est d'utiliser un éditeur à la place d'une Vue.
    Un TextEditor par exemple :wiki d'eclipse


    Sinon, si tu veux vraiment ajouter un Text ou StyledText à une Vue, tu peux faire :
    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
     
    public class LabelView extends ViewPart {
    	private Text text;
     
     
    	public LabelView() {
    		super();
    	}
     
    	public void setFocus() {
    		text.setFocus();
    	}
     
    	public void createPartControl(Composite parent) {
    		text = new Text(parent, SWT.MULTI);
    	}
    }
    Mais par la suite, tu risques d'être rapidement limité.


    Pingoui

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut
    Salut pingoui !

    merci pour ta réponse en fait ce que je veux avoir c'est une vue qui ressmble un peu à la console .
    J'ai ajouté la zone texte mais celle-ci ne s'étend que sur la moitité de la vue
    que faut-il ajouté comme paramètre SWT.FILL ?
    ou est ce qu'il faut d'abord ajouter la layout comme pour la création des wizards ?

  4. #4
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Bonsoir,

    Il faut utiliser un layout pour prendre la taille de ta vue

    Pingoui

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut
    Salut !

    Je voudrais afficher le contenu d'un fichier dans cette zone j'ai donc utilisé une méthode classique -lire un fichier ligne par ligne- mais au moment de l'afficher , mon programme ne m'affiche que la dernière ligne alors que si je fais un System.out.println (line) j'obtiens tout le contenu ! je ne comprends pas où est le problème !
    voilà le code :
    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
     
    try {
    	FileInputStream myFile = new FileInputStream("...");
    	DataInputStream myInput = new DataInputStream (myFile);
    	BufferedReader br = new BufferedReader(new InputStreamReader(myInput));
    	String line ;
     
    	while((line = br.readLine()) != null){
    	        System.out.println (line);
                    text.setText(line);
    		}
     
    	myInput.close();
     
    	} catch (Exception e) {
    		System.err.println("Error: " + e.getMessage());
     
    	}
    est ce qu'il y a une autre méthode plus simple que celle ci ??
    Merci d'avance

  6. #6
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    bonjour,
    tu fais un text.setText(line) pour chaque ligne donc logiquement le contenu est écrasé à chaque ligne... utilise StringBuilder.append(line) dans ton while et à la fin : text.setText(builder.toString() );

    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut
    Salut jojo !
    merci pour la réponse je ne sais pas si j'ai bien compris ce qu'il faut faire, j'ai essayé ça , il m'affiche bien tout le contenu mais l'affichage ne respecte pas le retour à la ligne - le résultat en une seule ligne - et à la fin il y a "null" qui apparaît voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FileInputStream myFile = new FileInputStream("....");
    DataInputStream myInput = new DataInputStream (myFile);
    BufferedReader br = new BufferedReader(new InputStreamReader(myInput));
    String line ;
    StringBuilder builder = new StringBuilder();
     
    while((line = br.readLine()) != null){
     
    	builder.append(line).toString();
    }
    text.setText(builder.append(line).toString());
    myInput.close();

  8. #8
    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,

    C'est normal qu'il y ait un "null" à la fin... Quand tu sors du while, c'est que line = null.
    Et t'as dernière instruction c'est text.setText(builder.append(line).toString()). Donc, tu rajoutes explicitement null au builder et tu fais ensuite un toString()...
    Il te faut juste faire un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    text.setText(builder.toString());
    Ensuite, les caractères de fin de ligne ne sont pas pris en compte dans un readLine(). Donc, si tu veux garder la structure de ton fichier, il te faut les rajouter. Ta boucle while devient donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while((line = br.readLine()) != null){
    	builder.append(line);
    	builder.append("\n");
    }
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut
    Salut !!

    Merci énormément ! c'est super

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut
    Salut !

    En fait y a un petit problème ! dans ma zone texte les deux fonctions Undo/Redo ne sont pas disponibles et ça me gène un peu de ne pas les avoir .
    Comment est ce que je pourrais les ajouter ?
    faut-il les implémenter ? Si c'est le cas est ce que vous pouvez m'aidez en me précisant les grandes étapes et merci énormément

  11. #11
    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
    C'est facile, il te suffit de faire comme pinguoi te l'a suggéré...

    Citation Envoyé par pingoui Voir le message
    Pour ton cas, le mieux est d'utiliser un éditeur à la place d'une Vue.
    Un TextEditor par exemple :wiki d'eclipse
    Pas de questions technique par MP, les forums sont là pour ça.

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut
    oui je sais que quand j'ai un éditeur la commande undo/redo est disponible
    mais si je veux travailler avec une vue est ce que je ne pourrais pas ajouter des boutons à ma barre d'outils et définir le comportement dans les handlers ?

  13. #13
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Salut bulldo,

    Oui cela est possible

    Rapidement :

    Ton Handler
    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
     
    public class YourCommand extends AbstractHandler{
     
    	/**
             * Le contexte d'annulation et l'historique d'annulation
             */
    	private IUndoContext undoContext;
    	private IOperationHistory operationHistory;
     
     
    	public YourCommand (){
    		this.undoContext = PlatformUI.getWorkbench().getOperationSupport().getUndoContext();
    		this.operationHistory = PlatformUI.getWorkbench().getOperationSupport()
    		.getOperationHistory();
    	}
     
    	/**
             * Cette méthode est appelé lors de la
             *  demande d'execution de la commande.
             */
    	@Override
    	public Object execute(ExecutionEvent event) throws ExecutionException {
    			try {
    				operationHistory.execute(
    						new YourOperation("une super commande",undoContext), null, null);
    			} catch (ExecutionException e) {
    				e.printStackTrace();
    			}
    		return null;
    }
    Ton operation annulable
    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
     
    public class YourOperation extends AbstractOperation{
     
     
     
    	public YourOperation(String label,IUndoContext undoContext) {
    		super(label);
    		addContext(undoContext);
    	}
     
    	@Override
    	public IStatus execute(IProgressMonitor monitor, IAdaptable info)
    			throws ExecutionException {
    		//On fait l'opération
                   System.out.println("execution de l'opération");
    		return Status.OK_STATUS;
    	}
     
    	@Override
    	public IStatus redo(IProgressMonitor monitor, IAdaptable info)
    			throws ExecutionException {
                    System.out.println("redo");
    		return execute(monitor, info);
    	}
     
    	@Override
    	public IStatus undo(IProgressMonitor monitor, IAdaptable info)
    			throws ExecutionException {
    		// On fait l'opération inverse
                     System.out.println("undo");
    		return Status.OK_STATUS;
    	}
    }
    sans oublier dans ta 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
     
    public class ZoneExplorerTreeView extends ViewPart {
     
    	/**
             * Les actions annuler et refaire
             */
    	private UndoActionHandler undoAction;
    	private RedoActionHandler redoAction;
     
     
    	/**
             * Le contexte d'annulation privé pour l'explorateur de zone
             */
    	private IUndoContext undoContext ;
     
    	public void createPartControl(Composite parent) {
    		//Tes widgets		
    		//Création des commandes d'undo/redo
    		createGlobalActionHandlers();
    		//Création du menu contextuel
    		hookContextMenu();
    	}
     
    	/**
             * Création des commandes d'undo/redo
             */
    	private void createGlobalActionHandlers() {
    		undoContext = PlatformUI.getWorkbench().getOperationSupport().getUndoContext();
    		// set up action handlers that operate on the current context
    		undoAction = new UndoActionHandler(this.getSite(), undoContext);
    		redoAction = new RedoActionHandler(this.getSite(), undoContext);
     
    		IActionBars actionBars = getViewSite().getActionBars();
    		actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(),
    				undoAction);
     
    		actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(),
    				redoAction);
     
    	}
     
    	/**
             * Ajoute le menu contextuel à la vue
             */
    	private void hookContextMenu() {
    		MenuManager menuMgr = new MenuManager("#PopupMenu");
    		menuMgr.setRemoveAllWhenShown(true);
    		menuMgr.addMenuListener(new IMenuListener() {
    			public void menuAboutToShow(IMenuManager manager) {
    				YourView.this.fillContextMenu(manager);
    			}
    		});
    		Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
    		treeViewer.getControl().setMenu(menu);
    		getSite().registerContextMenu(menuMgr, treeViewer);
    	}
     
    	/**
             * Ajoute les actions undo et redo au menu contextuel.
             */
    	private void fillContextMenu(IMenuManager manager) {
    		manager.add(undoAction);
    		manager.add(redoAction);
    		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    	}

    sinon, tu as des exemples :
    Exemple Eclipse

    pingoui

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Points : 51
    Points
    51
    Par défaut
    Salut Pingoui !!

    Merci beaucoup pour le code ! en fait je ne l'ai pas encore essayé j'essaye de comprendre un peu comment ça fonctionne ! le lien des exemples ne marche pas c'est pas grave
    pour le moment j'ai ajouté une seule commande dans la barre d'outil de ma vue ( undo ) faut-il créer une autre pour redo ou est ce que c'est déjà fait avec ton code parce que je vois que t'as rajouté les deux actions dans le menu contextuel ? tu travailles avec des actions ou des commandes ?
    si c'est des actions quelles sont les modifications à faire dans mon plugin.xml
    Merci énormément pour votre aide !

    ( j'ai jeté un coup d'oeil sur cette discussion http://www.developpez.net/forums/d67...edo-appli-rcp/)

  15. #15
    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
    Citation Envoyé par bulldo Voir le message
    pour le moment j'ai ajouté une seule commande dans la barre d'outil de ma vue ( undo ) faut-il créer une autre pour redo ou est ce que c'est déjà fait avec ton code parce que je vois que t'as rajouté les deux
    actions dans le menu contextuel ?
    Pour les exemples, tu peux regarder la documentation d'Eclipse.
    Si tu regardes dans le code, il ajoute aussi les actions à la barre d'action de la vue dans la méthode createGlobalActionHandlers().

    Citation Envoyé par bulldo Voir le message
    tu travailles avec des actions ou des commandes ?
    si c'est des actions quelles sont les modifications à faire dans mon plugin.xml
    Là, les actions sont déjà défini dans Eclipse, donc, il te suffit de les utiliser. Il n'y a pas à modifier le plugin.xml si tu les utilises dans le code. Mais rien ne t'empêche d'utiliser les commandes. Mais bon, ça sert à rien de réinventer la poudre sur ce coup là...

    Par contre, bulldo, il va sérieusement falloir que tu te mettes à investiguer par toi même. On est sur un forum d'entre-aide, mais il est inscrit dans les règles que tu dois d'abord avoir effectué des recherches avant de poster un message ou de commencer une discussion. Ce que tu n'as pas l'air de faire. Toutes ces informations sont déjà disponibles.
    Pas de questions technique par MP, les forums sont là pour ça.

  16. #16
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par bulldo Voir le message
    Merci beaucoup pour le code ! en fait je ne l'ai pas encore essayé j'essaye de comprendre un peu comment ça fonctionne ! le lien des exemples ne marche pas c'est pas grave
    Le lien est réparé

    Citation Envoyé par bulldo Voir le message
    pour le moment j'ai ajouté une seule commande dans la barre d'outil de ma vue ( undo ) faut-il créer une autre pour redo ou est ce que c'est déjà fait avec ton code parce que je vois que t'as rajouté les deux actions dans le menu contextuel ? tu travailles avec des actions ou des commandes ?
    Je préfère l'utilisation des commandes par rapport aux actions.
    La seule chose que je n'arrive pas à faire avec les commandes c'est la modification de label. (LabelRetarget) voir la discussion

    Le bout de code,ci-dessus, est un exemple simple de l'utilisation de l'undo/redo. Il ajoute un menu contextuel à ta vue... tu as juste besoin de faire un clic droit pour voir son fonctionnement

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

Discussions similaires

  1. Afficher texte dans une zone texte
    Par bob633 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/04/2010, 21h52
  2. Réponses: 1
    Dernier message: 25/03/2009, 00h23
  3. Intégrer une zone cachée dans une zone de texte
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 20/10/2008, 17h20
  4. Réponses: 3
    Dernier message: 29/06/2007, 16h29
  5. Effacer une chaine contenue dans une zone text
    Par johnnywalker dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2007, 13h52

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