2013-06-04 48 views
18

Có thể tạo một tổng hợp có thể lấy nét trong SWT không? Tôi đang bắt tất cả các sự kiện bàn phím thông qua bộ lọc Hiển thị, nhưng có một số vấn đề khi tiêu điểm nằm trên cây hoặc danh sách - hành động mặc định của GTK + là tìm kiếm trong nội dung của điều khiển.Đặt tiêu điểm tổng hợp trong SWT

Điều tôi muốn làm là trộn SWT và AWT với thành phần AWT có thể lấy nét. Tôi quản lý để làm cho các widget AWT không tập trung và tôi thêm bộ lọc Hiển thị để làm cho các thành phần AWT nhận được các sự kiện bàn phím (nhưng không trực tiếp), ngay cả khi nó không tập trung. Nhưng có một số vấn đề khi một số điều khiển SWT được tập trung - đó là lý do tại sao tôi muốn làm cho tập trung tổng hợp.

Vì vậy, câu hỏi cuối cùng của tôi là: có thể làm cho tổng hợp SWT có thể tập trung không?

+1

Nó không một bản sao ... Trong chủ đề được liên kết ở trên, người dùng muốn làm điều gì đó hoàn toàn khác ... Anh ấy muốn bỏ qua các điều khiển nhất định trong Composite; Tôi muốn làm cho bàn phím tổng hợp có thể lấy nét. Không cần phải đóng câu hỏi của tôi vì tôi chưa có câu trả lời nào. – m4tx

+0

Điểm của câu hỏi đó hoàn toàn giống nhau - để chọn tab tổng hợp. Tôi sẽ khuyên bạn nên thử giải pháp từ câu trả lời câu hỏi đó. – Eugene

+3

Không ... Tôi không muốn chọn tab tổng hợp. Tôi muốn làm cho bàn phím tổng hợp có thể lấy nét; làm cho các sự kiện bàn phím đánh bắt tổng hợp bằng cách nhấp vào nó (giống như bạn làm khi bạn nhấp vào, ví dụ, hộp văn bản); Tôi lặp lại - Tôi không muốn chọn tab. Và tôi không thể thử giải pháp từ câu trả lời câu hỏi đó, bởi vì tôi không có bất kỳ điều khiển nào trong tổng hợp của mình (hoặc, chính xác, tôi có 1 điều khiển AWT trong tổng hợp SWT này, nhưng tôi không muốn tạo AWT kiểm soát tập trung bởi vì nó gây ra rất nhiều trục trặc ...). – m4tx

Trả lời

3

Nếu số Composite chứa tiện ích con, hành động mặc định là từ bỏ tiêu điểm khi được chọn. Để phá vỡ này, hãy bắt đầu bằng cách mở rộng các lớp Composite như vậy:

class FocusableComposite extends Composite 
{ 
    public FocusableComposite(Composite parent, int style) 
    { 
     super(parent, style); 
    } 

    public boolean setFocus() 
    { 
     return super.forceFocus(); 
    } 
} 

Sau đó sử dụng một MouseListener trên instantiation mới của FocusableComposite gọi SetFocus() trực tiếp bất cứ khi nào Composite được nhấp:

Composite composite = new FocusableComposite(shell, SWT.NONE); 

composite.addMouseListener(new MouseAdapter() 
{ 
    public void mouseDown(MouseEvent event) 
    { 
     ((Composite)event.widget).setFocus(); 
    } 
}); 
Các vấn đề liên quan