2017-02-20 3 views
0
Boolean enablenext; 
String name; 
text = new Text(textbox1, SWT.SINGLE); 

text.addListener(SWT.KeyDown, new Listener() { 

     @Override 
     public void handleEvent(Event event) { 
      // TODO Auto-generated method stub 

      enableNext = true; 
      getWizard().getContainer().updateButtons(); 
      name = text.getText(); 

     } 
    }); 

J'ai un assistant avec 2 pages d'assistant. Dans la première page, j'ai un champ de texte. Je souhaite activer le bouton Suivant dans la page de l'assistant en fonction de l'entrée du champ de texte. Si nous remplissons le champ de texte, le bouton 'Suivant' devrait être activé et s'il est effacé, le bouton 'Suivant' devrait être désactivé dynamiquement. Cela doit arriver en cours d'exécution. Quelqu'un pourrait m'aider s'il vous plaît comment faire cela en utilisant 'jface'. Le bouton Suivant de la page de l'assistant doit être activé lors de la saisie de l'entrée pour le champ de texte, pas seulement sur le focus du champ de texte.Comment activer le bouton Suivant dans la page de l'assistant en fonction de l'entrée - SWT Java

+1

double possible de [Listener approprié pour SWT Texte ] (http://stackoverflow.com/questions/19348411/appropriate-listener-for-swt-text) – liorsolomon

+0

que dint m'aider, il dit à propos de l'activation du bouton lorsque la zone de texte si elle est concentrée. mais je le veux quand il y a une entrée donnée au champ de texte. – Lisha

+0

et il m'a donné cette erreur, la méthode addListener (int, Listener) dans le type Widget est pas applicable pour les arguments (nouveau \t Listener() {}) \t - Listener ne peut être résolu à un type – Lisha

Répondre

0

Appelez le WizardPage méthode setPageComplete pour activer/désactiver le bouton suivant:

setPageComplete(true or false); 

setPageComplete appellera la méthode contenant updateButtons donc il n'y a pas besoin de le faire.

Vous pouvez appeler cette fois le texte du contrôle modifié. Pour un contrôle de texte, utilisez le addModifyListener pour écouter les modifications apportées au texte et appelez le setPageComplete selon le cas.

text.addModifyListener(new ModifyListener() 
    { 
    @Override 
    public void modifyText(ModifyEvent event) 
    { 
     // TODO get control text, save, and call setPageComplete 
    } 
    }); 
+0

@ greg-499: merci pour l'entrée. Je le veux de cette façon .... Dès que j'ouvre l'assistant, le bouton suivant devrait être activé si le champ de texte est rempli de données ou désactivé si rien ne se trouve dans le champ de texte. S'il n'y a rien pré-rempli dans le champ de texte, puis une fois que l'utilisateur donne le bouton netx d'entrée doit être activé et l'utilisateur de données doit être capturé dans un champ de chaîne – Lisha

+0

Alors appelez setPageComplete true/false dans les endroits appropriés. –

+0

Ajout du contour de l'écouteur modifier pour répondre –

0

Vous pouvez coupler l'état du bouton avec l'état du champ de saisie par écouteur de notification:

textField.addModifyListener(e->buttonNext.setEnabled(textField.getText().length() > 0)); 

Voici le code échantillon entier:

package dialog; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.events.SelectionListener; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Dialog; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 

public class CollobarationDialog extends Dialog { 
    Text textField; 
    Button buttonNext; 

    public CollobarationDialog(Shell parent) { 
    super(parent); 
    } 

    public CollobarationDialog(Shell parent, int style) { 
    super(parent, style); 
    } 


    private void openDialog() { 
    Shell parent = getParent(); 
    final Shell shell = 
     new Shell(parent, SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL); 
    shell.setText("Collobaration Dialog"); 

    shell.setLayout(new GridLayout(3, true)); 

    textField = new Text(shell, SWT.SINGLE | SWT.BORDER); 

    buttonNext = new Button(shell, SWT.PUSH); 
    buttonNext.setText("Next"); 
    buttonNext.setEnabled(false); 
    Button buttonCancel = new Button(shell, SWT.PUSH); 
    buttonCancel.setText("Cancel"); 

    textField.addModifyListener(e->buttonNext.setEnabled(textField.getText().length() > 0)); 

    buttonCancel.addSelectionListener(new SelectionListener() { 

     @Override 
     public void widgetSelected(SelectionEvent arg0) { 
      shell.dispose(); 

     } 

     @Override 
     public void widgetDefaultSelected(SelectionEvent arg0) { 
      // Nothing to do 

     } 
    }); 

    shell.pack(); 
    shell.open(); 

    Display display = parent.getDisplay(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) 
     display.sleep(); 
    } 
    } 

    public static void main(String[] args) { 
    Shell shell = new Shell(); 
    CollobarationDialog dialog = new CollobarationDialog(shell); 
    dialog.openDialog();   
    } 
} 
+0

La question concerne un assistant JFace - ce code n'a rien à voir avec les assistants. –