2014-09-30 2 views
2

셸을 열고 액티브로 만들 수있는 방법이 있는지 알아야합니다. 콘트롤을 클릭하더라도 말이죠. 내가 필요한 것이 무엇인지를 설명하는 가장 좋은 방법은이 작은 예를 보여주는 것입니다. 첫 번째 쉘을 활성 상태로 유지해야합니다. 두 번째 쉘을 클릭하거나 포함 된 위젯을 클릭합니다.쉘을 활성화하지 않고 어떻게 열 수 있습니까?

public class TestMeOut 
{ 
    public static void main(final String[] args) 
    { 

     final Display display = new Display(); 
     final Shell shell = new Shell(display); 
     shell.setLayout(new GridLayout(1, false)); 

     final Shell shell2 = new Shell(shell); 
     shell2.setLayout(new GridLayout()); 

     final Button btn = new Button(shell, SWT.PUSH); 
     final Button btn2 = new Button(shell2, SWT.PUSH); 

     btn.setText("Test me"); 
     btn2.setText("I steal focus"); 

     btn.addSelectionListener(new SelectionAdapter() 
     { 
      @Override 
      public void widgetSelected(final SelectionEvent e) 
      { 
       shell2.setVisible(true); 
      } 
     }); 

     btn2.addSelectionListener(new SelectionAdapter() 
     { 
      @Override 
      public void widgetSelected(final SelectionEvent e) 
      { 
       shell2.setVisible(false); 
      } 
     }); 

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

     shell.addShellListener(new ShellListener() 
     { 

      public void shellIconified(final ShellEvent e) 
      { 
      } 

      public void shellDeiconified(final ShellEvent e) 
      { 
      } 

      public void shellDeactivated(final ShellEvent e) 
      { 
       System.out.println("Deactivated! This isn't supposed to happen."); 
      } 

      public void shellClosed(final ShellEvent e) 
      { 
      } 

      public void shellActivated(final ShellEvent e) 
      { 
       System.out.println("Activated!"); 
      } 
     }); 

     shell2.pack(); 
     shell2.open(); 
     shell2.setVisible(false); 

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

미리 감사드립니다.

당신은 자식 쉘 종료하지 않는 한 부모 쉘과 상호 작용 할 수 없도록 할 두 번째 Shell의 스타일을 변경하고 SWT.APPLICATION_MODAL을 사용할 수 있습니다

답변

2

:

final Shell shell2 = new Shell(shell, SWT.SHELL_TRIM | SWT.APPLICATION_MODAL); 

인스턴스의 양상을 할 수있다 스타일 비트를 사용하여 지정하십시오. 모달 스타일 비트는 화면의 다른 쉘에 대한 입력이 차단되었는지 여부를 판별하는 데 사용됩니다. PRIMARY_MODAL 스타일을 사용하면 인스턴스가 부모에 대한 입력을 차단할 수 있습니다. APPLICATION_MODAL 스타일을 사용하면 인스턴스가 디스플레이의 다른 모든 셸에 대한 입력을 차단할 수 있습니다. SYSTEM_MODAL 스타일을 사용하면 인스턴스가 다른 응용 프로그램에 속한 셸을 포함하여 모든 셸에 대한 입력을 차단할 수 있습니다.

SWT.PRIMARY_MODAL도이 경우에 충분합니다. 첫 번째 쉘은

shell2.setEnabled(false); 
+0

: 당신은 아이가 클릭 할 때 초점을 푸는 부모를 원하지 않는 반면에 경우


UPDATE

, 단지 아이를 비활성화 여전히 비활성화됩니다. 항상 활동적으로 있어야합니다. – spetrila

+0

@JNewbie 그래서 부모님은 계속 활동하고 아이는 활동하지 않기를 원하십니까? – Baz

+0

예, 아이를 클릭해도 부모는 계속 활성 상태 여야합니다. – spetrila