2010-11-03 31 views
5

Tôi đang làm việc với Gxt. Tôi cần đặt trọng tâm cho trường được bật đầu tiên trên trang. Nhưng tôi có rất nhiều trang và tôi muốn tập trung hành vi đó. Có một thiếu tài liệu trong Gxt vì vậy tôi tự hỏi nếu ai đó đã gặp một vấn đề như vậy và có thể giúp tôi.Quản lý tập trung Gxt

Bây giờ nó đi như thế trong lớp học của mỗi thành phần

protected void resetFocus() { 
    combobox.focus(); 
} 

@Override 
public void show() { 
    super.show(); 
    resetFocus(); 
} 

Tôi có tìm thấy com.extjs.gxt.ui.client.aria.FocusManager nhưng là hoàn toàn không rõ ràng làm thế nào tôi có thể sử dụng nó. Hoặc có thể Cũng có thể lấy chuỗi các trường khi chúng đi vào thành phần theo tiêu điểm. Và tôi có thể di chuyển phương thức resetFocus sang lớp cha.

SMTH như thế

protected void resetFocus() { 
    *getFocusChain().get(0).focus();* 
} 
+1

Có thể bạn có thể hiển thị mã cho chúng tôi? Nó không làm cho mọi người muốn giúp đỡ với vấn đề của bạn khi bạn gọi nó là một nhiệm vụ tầm thường, nó làm cho bạn có vẻ lười biếng trong phần nghiên cứu của vấn đề. – Woot4Moo

+0

Cảm ơn, bạn đã đúng! Tôi nhận ra rằng bài viết của tôi cho thấy tôi không phải từ một mặt tốt nhất. Tôi sẽ viết lại nó. – Zalivaka

+0

viết lại, mở cho nhà phê bình và điền nhu cầu trợ giúp. – Zalivaka

Trả lời

2

Focus sau khi làm một số chậm trễ Vì vậy, bạn phải sử dụng Scheduler.get(). ScheduleDeferred phương pháp. Hoặc DeferredCommand trên gwt 1.7 hoặc trước đó.

Ví dụ về cách sử dụng;

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

@Override 
public void execute() { 
    widget.focus(); 
    widget.el().focus(); 
    widget.getElement().focus(); 
} 

});

+0

Nó không hữu ích chút nào. Tôi đã tìm kiếm giải pháp tôi có thể thực hiện một lần và không sao chép-dán tập trung() mã. Tôi đã thực hiện hệ thống quản lý tập trung của riêng mình, vì vậy câu hỏi không còn thực tế nữa. – Zalivaka

+0

Tại sao bạn không chia sẻ giải pháp của mình ở đây. Có lẽ giải pháp của bạn sẽ giúp người khác. –

+0

Ít nhất nó làm việc cho tôi. Tôi đã sử dụng scheduleFinally mà không làm việc, scheduleDeferred đã làm các trick. Tôi chỉ sử dụng someTextField.focus(), trong GXT 3 nó có vẻ là đủ. – PhiLho

3

Dựa trên phản ứng cuối cùng, tôi nhận được điều này để làm việc trong một cửa sổ GXT3 bằng cách làm như sau:

@Override 
public void show() { 
    super.show(); 
    Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { 
     @Override 
     public void execute() { 
      field.focus(); 
     } 
    }); 
} 

Bằng cách này khi cửa sổ mở ra, lĩnh vực này đã tập trung và bạn có thể bắt đầu nhập.