2009-06-30 7 views
5

Khi một trong các bảng có trong một số JTabbedPane được nhấp, tôi cần thực hiện một vài thao tác khi bắt đầu. Ví dụ: tôi cần kiểm tra tên người dùng và mật khẩu. Chỉ khi những trận đấu đó, các hoạt động bảng cụ thể cần phải được thực hiện. Bạn có thể đề xuất bất kỳ phương pháp nào không?JTabbedPane: Các thao tác được thực hiện trước khi hiển thị tab đã chọn

Trả lời

7

Không chắc tôi hoàn toàn hiểu câu hỏi của bạn, nhưng tôi sẽ làm điều gì đó như:

  • Thêm một ChangeListener đến JTabbedPane để nghe cho tab nhấp chuột đầu tiên.
  • Khi ChangeEvent xảy ra, hãy thực hiện đăng nhập trên chuỗi nền bằng cách sử dụng SwingWorker.
  • Nếu thông tin đăng nhập thành công, hãy thực hiện các thao tác UI được yêu cầu trên chuỗi gửi sự kiện.

Ví dụ:

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

Các hành động để thay đổi tab được kích hoạt bởi một người biết lắng nghe con chuột trong lớp UI. nó đi qua và kiểm tra xem có một tab ở tọa độ được nhấp hay không và nếu có, liệu tab có được bật hay không. Nếu đáp ứng các tiêu chí đó, nó sẽ gọi số setSelectedIndex(int) trên số JTabbedPane của bạn. Để chặn tab thay đổi, những gì bạn có thể làm là ghi đè setSelectedIndex(int) để kích hoạt kiểm tra quyền. Sau khi các quyền được xác thực, bạn có thể thực hiện cuộc gọi đến super.setSelectedIndex(int). điều này nên làm những gì bạn muốn.

xin lưu ý rằng nếu kiểm tra quyền là cuộc gọi chạy dài (tức là cuộc gọi đến cơ sở dữ liệu hoặc máy chủ), bạn nên sử dụng chức năng như SwingWorker chia nhỏ quá trình xử lý của mình để kiểm tra quyền được thực hiện trên AWT EventQueue và cuộc gọi đến super.setSelectedIndex(int) được thực hiện trên AWT EventQueue.

+0

thanx để trả lời ur .. –