2017-02-20 23 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(); 

     } 
    }); 

У меня есть мастер с 2 страницами мастера. На первой странице у меня есть текстовое поле. Я хочу включить следующую кнопку на странице мастера на основе ввода текстового поля. Если мы заполним текстовое поле, то кнопка «Далее» должна быть включена, и если она будет удалена, кнопка «Далее» должна быть отключена динамически. Это должно произойти во время выполнения. Может кто-то, пожалуйста, помогите мне, как это сделать, используя «jface». Кнопка «Следующая страница мастера» должна быть включена при вводе ввода для текстового поля не только в фокусе текстового поля.Как включить следующую кнопку на странице мастера на основе ввода SWT Java

+1

Возможный дубликат [соотвествующей Listener для СВТ Текст ] (http://stackoverflow.com/questions/19348411/appro-listener-for-swt-text) – liorsolomon

+0

, который помогает мне, он говорит о включении кнопки, когда текстовое поле фокусируется. но я хочу его, когда есть введенный текст в текстовое поле. – Lisha

+0

и он дал мне эту ошибку, метод AddListener (интермедиат, Listener) в типе Widget не применяется для аргументов (новый \t Слушатель() {}) \t - Слушатель не может быть разрешен к типу – Lisha

ответ

0

Вызвать метод WizardPagesetPageComplete, чтобы включить/отключить следующую кнопку:

setPageComplete(true or false); 

setPageComplete будет вызывать метод контейнера updateButtons так что нет необходимости делать это.

Вы можете называть это время изменением текста в элементе управления. Для текстового управления используйте addModifyListener для прослушивания изменений текста и при необходимости вызовите setPageComplete.

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

@ greg-499: спасибо за ввод. Я хочу это так ... Как только я открою мастер, следующая кнопка должна быть включена, если текстовое поле заполнено данными или отключено, если в текстовом поле ничего не существует. Если в текстовом поле ничего не было предварительно заполнено, то после того, как пользователь будет вводить входную кнопку netx, необходимо включить и ввести данные пользователя в поле строки – Lisha

+0

Так что вызов setPageComplete true/false в соответствующих местах. –

+0

Добавлен контур изменения прослушивателя для ответа –

0

Вы можете соединить состояние кнопки с состоянием поля ввода с помощью уведомления слушателя:

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

Здесь весь образец кода:

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

Вопрос о JFace Wizard - этот код не имеет ничего общего с мастерами. –