2012-10-25 3 views
0

부모/자식 대화 상자의 작동 방식을 실제로 이해해야합니다.SWT - 상속 상위 대화 상자?

내 사용자는 Teamcenter라는 OTB 애플리케이션을 사용합니다. Teamcenter 응용 프로그램의 메뉴 선택에서 호출되는 응용 프로그램에 대한 추가 기능을 작성하고 있습니다.

메뉴 항목을 클릭하면 처리기 클래스가 실행되고 응용 프로그램의 기본 대화 상자가 만들어집니다.

public class AplotDialogHandler extends AbstractHandler { 
    private static AplotBaseDialog dlg = null; 

    public AplotDialogHandler() { 

    }// end Constructor 

    ////////////////////////////////////////////////////////////////////////// 
    //       execute()         // 
    ////////////////////////////////////////////////////////////////////////// 
    @Override 
    public Object execute(final ExecutionEvent event) throws ExecutionException { 
    if (dlg == null) { 
     try { 
      AbstractAIFApplication app = AIFDesktop.getActiveDesktop().getCurrentApplication(); 
     TCSession session = (TCSession) app.getSession(); 
     TCUserService userService = session.getUserService(); 

     AplotVersion.negotiateVersion(userService); 
     AplotQueryCapabilities.initialize(userService); 

     dlg = new AplotBaseDialog(null, session); 
    } 
    catch (Exception ex) { 
     MessageBox.post(HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell(), ex, true); 
    } 
    } 

    dlg.create(); 
    dlg.getShell().setSize(700, 400); 
    dlg.open(); 

    return null; 
}// end execute() 
}// end EdiDialogHandler() 

질문 1. 내 애플리케이션이 Teamcenter 응용 프로그램과 관련이없는 것 같습니다. Teamcenter를 닫고 내 애플리케이션을 열어 둘 수 있다는 의미입니다.

질문 2. 작업 영역 쉘을 가져 와서 기본 대화 상자에 전달해야합니까? 그러나 내 애플리케이션이 열려 있어도 사용자는 Teamcenter 애플리케이션을 사용하여 애플리케이션에 보낼 데이터를 선택할 수 있어야합니다.

질문 3. 기본 대화 상자에서 대화 상자를 열 때 항상 기본을 전달해야합니까? 이러한 대화 상자에 대한 대화 상자 셸?

질문 4. 사용자가 완료 될 때 대화 상자를 닫아야하는 표준 방법이 있습니까?

답변

1

부모 쉘을 닫을 때 하위 쉘도 닫히도록 부모 쉘을 대화 상자에 전달해야합니다.

친숙한 셸을 차단하지 않도록 대화 상자를 MODELESS (스타일로 사용 참고 : 힌트)로 설정해야합니다. 여기

샘플 코드입니다 :

public static void main(String[] args) { 

    Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, false)); 
    shell.setSize(200, 200); 
    Button b = new Button(shell, SWT.NONE); 
    b.setText("Click"); 
    b.addSelectionListener(new SelectionListener() { 

     @Override 
     public void widgetSelected(SelectionEvent e) { 


     CDialog dialog = new CDialog(shell); 

     dialog.open(); 
     } 

     @Override 
     public void widgetDefaultSelected(SelectionEvent e) { 

     // TODO Auto-generated method stub 

     } 
    }); 

    shell.open(); 



    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) 
     display.sleep(); 
    } 
    display.dispose(); 
    } 


    private static class CDialog extends Dialog 
    { 

    /** 
    * @param parentShell 
    */ 
    protected CDialog(Shell parentShell) { 

     super(parentShell); 
    } 

    /* (non-Javadoc) 
    * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) 
    */ 
    @Override 
    protected Control createDialogArea(Composite parent) { 

     Composite comp = (Composite) super.createDialogArea(parent); 

     Label lbl = new Label(comp, SWT.NONE); 
     lbl.setText("Test modeless dialog"); 

     return comp; 
    } 
    /* (non-Javadoc) 
    * @see org.eclipse.jface.window.Window#getShellStyle() 
    */ 
    @Override 
    protected int getShellStyle() { 
     return SWT.DIALOG_TRIM|SWT.MODELESS; 
    } 

    } 
+0

어떻게 내 기본 대화 상자의 크기를 설정합니까? – jkteater

+0

대화 상자에 getInitialSize() 메소드가 있습니다. 대화 상자의 초기 크기를 설정합니다. –

관련 문제