2012-10-27 42 views

回答

9

剛剛創建自己的Dialog

public static void main(String[] args) { 
    PasswordDialog dialog = new PasswordDialog(new Shell()); 
    dialog.open(); 

    System.out.println(dialog.getPassword()); 
} 

public static class PasswordDialog extends Dialog { 
    private Text passwordField; 
    private String passwordString; 

    public PasswordDialog(Shell parentShell) { 
     super(parentShell); 
    } 

    @Override 
    protected void configureShell(Shell newShell) 
    { 
     super.configureShell(newShell); 
     newShell.setText("Please enter password"); 
    } 

    @Override 
    protected Control createDialogArea(Composite parent) { 
     Composite comp = (Composite) super.createDialogArea(parent); 

     GridLayout layout = (GridLayout) comp.getLayout(); 
     layout.numColumns = 2; 

     Label passwordLabel = new Label(comp, SWT.RIGHT); 
     passwordLabel.setText("Password: "); 
     passwordField = new Text(comp, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD); 

     GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); 
     passwordField.setLayoutData(data); 

     return comp; 
    } 

    @Override 
    protected void okPressed() 
    { 
     passwordString = passwordField.getText(); 
     super.okPressed(); 
    } 

    @Override 
    protected void cancelPressed() 
    { 
     passwordField.setText(""); 
     super.cancelPressed(); 
    } 

    public String getPassword() 
    { 
     return passwordString; 
    } 
} 

結果看起來是這樣的:

enter image description here

+1

這是一個JFaces對話框而不是SWT對話框。當然相關,但並不完全回答這個問題。 – adamfisk

+0

@adamfisk我不得不不同意。問題是要求輸入對話框,它是一個JFace對話框。這個問題沒有提到像「我只想要SWT對話框,沒有JFace」。 – Baz

+0

你是對的 - InputTialog在SWT中不存在,所以JFaces肯定是隱含的和必需的 - 我站得更正! – adamfisk

5

你也可以繼承InputDialog爲並覆蓋用於文本控件的樣式。

public class PasswordDialog extends InputDialog { 

    public PasswordDialog(Shell parentShell, String dialogTitle, String dialogMessage, String initialValue, IInputValidator validator) { 
     super(parentShell, dialogTitle, dialogMessage, initialValue, validator); 
    } 

    @Override 
    protected int getInputTextStyle() { 
     return super.getInputTextStyle() | SWT.PASSWORD; 
    } 
}