2011-10-17 12 views
6

gì tôi đã cố gắng cho đến nay:Làm cách nào để tạo một chế độ xem có thể cuộn trong ứng dụng RCP Eclipse?

Trong createPartControl:

ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL); 
     sc.setLayoutData(new GridData(GridData.FILL_BOTH)); 
     sc.setExpandVertical(true); 
     sc.setExpandHorizontal(true); 
     sc.setSize(ApplicationWorkbenchWindowAdvisor.WIDTH, ApplicationWorkbenchWindowAdvisor.HEIGHT); 
     final TabFolder tabFolder = new TabFolder(sc, SWT.TOP); 

nhưng điều này không hoạt động. Vấn đề của tôi là nếu tôi thay đổi kích thước cửa sổ chương trình, các thanh cuộn không xuất hiện trong giao diện của tôi. Bất kỳ ý tưởng?

Trả lời

7

Javadoc of ScrolledComposite mô tả hai cách để sử dụng nó, bao gồm mã ví dụ. Tổng hợp, lập:

  1. Bạn có thể thiết lập kích thước của điều khiển/composite chứa trong ScrolledComposite của bạn trên điều khiển/composite tự
  2. Hoặc bạn nói ScrolledComposite kích thước tối thiểu của bạn để sử dụng cho nội dung của nó.

Hiện tại, bạn đang làm không. Bạn đang đặt kích thước trên ScrolledComposite, nhưng trừ khi bạn không sử dụng trình quản lý bố cục, điều đó không có ý nghĩa nhiều. Trong mọi trường hợp, hãy xem liên kết ở trên cho một số mã ví dụ chính thức.

+3

Xin cảm ơn! Bây giờ tôi đã học được LUÔN LUÔN kiểm tra javadoc trước khi hỏi những câu hỏi ngu ngốc ... –

4

Đây là một đoạn mã nhỏ mà làm việc cho tôi:

ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
    Composite composite = new Composite(sc, SWT.NONE); 
    sc.setContent(composite); 

    Label lblRelation = new Label(composite, SWT.NONE); 
    lblRelation.setBounds(10, 13, 74, 15); 
    lblRelation.setText("Label name:"); 
    composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
+0

cũng làm việc cho tôi. thanks – Michael

6

Điển hình trong quan điểm Eclipse, tôi muốn kiểm soát của tôi để lấy tất cả không gian có sẵn, và chỉ hiển thị thanh cuộn, nếu trường hợp một điều khiển sẽ co lại dưới đây một kích thước có thể sử dụng.

Các câu trả lời khác hoàn toàn hợp lệ, nhưng tôi muốn thêm một ví dụ đầy đủ về phương thức createPartControl (Eclipse e4).

@PostConstruct 
public void createPartControl(Composite parent) { 
    ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); 
    Composite composite = new Composite(sc, SWT.NONE); 
    sc.setContent(composite); 

    composite.setLayout(new GridLayout(2, false)); 

    Label label = new Label(composite, SWT.NONE); 
    label.setText("Foo"); 

    Text text = new Text(composite, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI); 
    GridDataFactory.fillDefaults().grab(true, true).hint(400, 400).applyTo(text); 

    sc.setExpandHorizontal(true); 
    sc.setExpandVertical(true); 
    sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
} 

Lưu ý rằng .fillDefaults() ngụ ý .align(SWT.FILL, SWT.FILL).

Tôi thường sử dụng mô hình này, vì vậy tôi đã tạo ra phương pháp sau đây ít helper:

public static ScrolledComposite createScrollable(Composite parent, Consumer<Composite> scrollableContentCreator) { 
    ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
    Composite composite = new Composite(sc, SWT.NONE); 
    sc.setContent(composite); 

    scrollableContentCreator.accept(composite); 

    sc.setExpandHorizontal(true); 
    sc.setExpandVertical(true); 
    sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
    return sc; 
} 

Nhờ Java 8 lambdas, bây giờ bạn có thể thực hiện composit cuộn mới theo một cách rất nhỏ gọn:

createScrollable(container, composite -> { 
     composite.setLayout(new FillLayout()); 
     // fill composite with controls 
    }); 
+0

Tôi nhận được kết quả tương tự có hoặc không có lệnh gọi 'setMinSize' có vẻ lạ ... Thanh cuộn xuất hiện khi trình chỉnh sửa của tôi nhỏ hơn gợi ý kích thước trong' GridData' theo một trong hai cách. Có lẽ điều này phải làm với thực tế là nó là một trình soạn thảo Biểu mẫu nhiều trang ... – Lii