2010-01-29 22 views
8

Làm cách nào để ngăn chặn trường văn bản nhiều dòng từ các lần nhấn phím tab "ăn cắp"?Sử dụng phím Tab trên văn bản nhiều dòng được lưu trong swt?

Ý tôi là: Tôi muốn sử dụng TAB để chuyển đổi giữa các phần tử của cửa sổ, nhưng khi tôi nhập văn bản nhiều dòng, TAB trở thành khóa "bình thường" và chỉ cần chèn tabulators vào văn bản tôi đang nhập .

Làm cách nào để xử lý việc này? Tôi có nên viết một số người nghe tùy chỉnh, hoặc tôi có thể thay đổi hành vi của các thành phần bằng cách sử dụng một hằng số SWT?

Trả lời

20

SWT định nghĩa cơ chế triển khai loại hành vi này bằng cách sử dụng lớp TraverseListener. Đoạn mã sau (được lấy từ here) cho biết cách thực hiện:

Text text1 = new Text(shell, SWT.MULTI | SWT.WRAP); 
text1.setBounds(10,10,150,50); 
text1.setText("Tab will traverse out from here."); 
text1.addTraverseListener(new TraverseListener() { 
    public void keyTraversed(TraverseEvent e) { 
     if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) { 
      e.doit = true; 
     } 
    } 
}); 
2

Thêm trình xử lý gõ phím vào trường văn bản hoặc vùng văn bản và triển khai trình xử lý đặc biệt cho TAB. Tôi đã nhìn thấy 'tab bắt' trên các ứng dụng Swing quá và nó thường gây phiền nhiễu.

Bạn có thể cung cấp xử lý khác cho phím Shift - TAB mà sau đó sẽ chèn một \t, nếu bạn vẫn muốn cho phép các tab trong textfield.

+0

Nó hoạt động, cảm ơn rất nhiều. –

Các vấn đề liên quan