JTabbedPane
에있는 패널 중 하나를 클릭하면 처음에 몇 가지 작업을 수행해야합니다. 예를 들어, 사용자 이름과 암호를 확인해야한다고 가정 해보십시오. 일치하는 경우에만 특정 패널 작업을 수행해야합니다. 어떤 방법을 제안 할 수 있습니까?JTabbedPane : 선택된 탭을 표시하기 전에 수행되는 작업
5
A
답변
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 클래스의 마우스 수신기에 의해 트리거됩니다. 그것은 통과하고 클릭 된 좌표에 탭이 있는지 여부를 검사하고, 그렇다면 탭이 활성화되었는지 여부를 확인합니다. 해당 기준을 충족하면 JTabbedPane
에 setSelectedIndex(int)
(으)로 전화합니다. 탭 변경을 가로 채기 위해 수행 할 수있는 작업은 setSelectedIndex(int)
을 재정 의하여 권한 검사를 실행하는 것입니다. 사용 권한이 확인되면 super.setSelectedIndex(int)
으로 전화를 걸 수 있습니다. 이것은 당신이 원하는 것을해야합니다.
사용 권한 확인이 장기 실행 호출 (예 : 데이터베이스 또는 서버 호출) 인 경우 SwingWorker
과 같은 것을 사용하여 처리를 분할해야 사용 권한 확인이 AWT EventQueue
super.setSelectedIndex(int)
에 대한 호출은 AWT EventQueue
에서 수행됩니다.
답장을 보내 주시면 감사하겠습니다. –