2009-06-30 4 views

답변

7

확실하지 나는 완전히 당신의 질문을 이해하지만, 내가 좋아하는 뭔가를 할 것이다 :

  • 가 첫 번째 탭의 클릭을 수신하기 위해 JTabbedPane에에 ChangeListener를 추가합니다.
  • ChangeEvent가 발생하면 SwingWorker를 사용하여 백그라운드 스레드에서 로그인을 수행하십시오.
  • 로그인이 성공하면 이벤트 발송 스레드에서 필요한 UI 작업을 수행하십시오. 예를 들어

:

tabbedPane.addChangeListener(new ChangeListener() { 
    private boolean init; 

    public void stateChanged(ChangeEvent e) { 
     if (!init) {           
      init = true; 

      new SwingWorker<Boolean, Void>() { 
       @Override 
       protected void done() { 
        try { 
         boolean loggedIn = get(); 

         if (loggedIn) { 
          // Success so perform tab operations. 
         } 
        } catch (InterruptedException e1) { 
         e1.printStackTrace(); // Handle this. 
        } catch (ExecutionException e1) { 
         e1.printStackTrace(); // Handle this. 
        } 
       } 

       protected Boolean doInBackground() throws Exception { 
        // Perform login on background thread. Return true if successful. 
        return true; 
       } 
      }.execute(); 
     } 
     } 
    }); 
3

탭을 변경하는 액션은 UI 클래스의 마우스 수신기에 의해 트리거됩니다. 그것은 통과하고 클릭 된 좌표에 탭이 있는지 여부를 검사하고, 그렇다면 탭이 활성화되었는지 여부를 확인합니다. 해당 기준을 충족하면 JTabbedPanesetSelectedIndex(int) (으)로 전화합니다. 탭 변경을 가로 채기 위해 수행 할 수있는 작업은 setSelectedIndex(int)을 재정 의하여 권한 검사를 실행하는 것입니다. 사용 권한이 확인되면 super.setSelectedIndex(int)으로 전화를 걸 수 있습니다. 이것은 당신이 원하는 것을해야합니다.

사용 권한 확인이 장기 실행 호출 (예 : 데이터베이스 또는 서버 호출) 인 경우 SwingWorker과 같은 것을 사용하여 처리를 분할해야 사용 권한 확인이 AWT EventQueuesuper.setSelectedIndex(int)에 대한 호출은 AWT EventQueue에서 수행됩니다.

+0

답장을 보내 주시면 감사하겠습니다. –

관련 문제