首先說明的是:
爲了用滾動面板最好用3個層次的Composite:
befComposite---滾動面板的直接父類; scrolledComposite---滾動面板自己;inComposite--滾動面板的直接子類,用於存放各種子控件。
Java代碼
- Composite befComposite= new Composite(shell, SWT.NONE);
- gridData = new GridData(GridData.FILL_BOTH);
- befComposite.setLayoutData(gridData);
- befComposite.setLayout(new FillLayout());//這個是必須的,就是滾動面板的直接父類 layout類型必須是:FillLayout對象
- ScrolledComposite scrolledComposite = new ScrolledComposite(befComposite, SWT.H_SCROLL | SWT.V_SCROLL);
- scrolledComposite.setExpandHorizontal(true);
- scrolledComposite.setExpandVertical(true); //這兩句是設置水平和豎直滾動條可見的,也是必須的。
- Composite inComposite= new Composite(scrolledComposite, SWT.NONE);
- gridData = new GridData(GridData.FILL_BOTH);
- inComposite.setLayoutData(gridData);
- inComposite.setLayout(new RowLayout());
- scrolledComposite.setContent(inComposite);
- scrolledComposite.setMinSize(new Point(140, 680)); //這兩句是指定滾動面板的內容及最小大小的,也是必須的,不然是沒有滾動效果的
然後就是對inComposite填充數據了,別忘了 動態填充數據後inComposite.layout();使數據動態呈現。
-------------------------------------------------------------------------------------
如果按以上步驟滾動條出現了,但是沒有滾動效果,那麼做如下處理:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Java代碼
- ScrollBar vb = scrolledComposite.getVerticalBar();// 控制垂直方向滾動增量
- vb.setIncrement(10);
- inComposite.addMouseListener(new MouseAdapter(){
- @Override
- public void mouseDown(MouseEvent e) {
- inComposite.setFocus();
- }
- });
在正確設置的情況下,滾動面板的滾動條不能動時,原因:就是該滾動面板未獲得焦點,只要手動之定義讓其獲得焦點點就可以了,上面的
Java代碼
- public void mouseDown(MouseEvent e) {
- inComposite.setFocus();
- }
只是其中的一種方法,可以是任意的監聽,只要保證在鼠標滾動前 滾動面板或其直接子類 setFocus() 就可以了。
另外 vb.setIncrement(10); 是設置自定義的滾動幅度大小,可以根據需要自行設置。