如何检测SWT表的滚动条可见性更改

| 如何检测Java SWT表的垂直ScrollBar何时可见?我需要该信息来重新计算列的宽度。似乎没有事件(除Selection之外)在ScrollBar上触发。     
已邀请:
我认为您已经正确地找到了检测ѭ0detecting的简便方法。无论如何,这里提供的解决方案都是黑客。 我正在使用此SWT代码段中提出的概念来计算表中的可见行。与此同时,我也在使用
SWT Paint Event
。 基本概念如下: 计算可见行(项目)的数量。 将其与总行数(项目)进行比较。 在添加行(项目)时发生的某些情况下执行所有这些操作。我选择了
SWT Paint Event
>>代码
import org.eclipse.swt.*;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class TableScrollVisibilityTest 
{
    private static int count;

    public static void main(String [] args) 
    {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setBounds(10,10,300,300);
        shell.setLayout(new GridLayout(2,true));

        final Table table = new Table(shell, SWT.NONE);
        GridData data = new GridData(GridData.FILL_BOTH);
        data.horizontalSpan = 2;
        table.setLayoutData(data);

        count = 0;

        final Button addItem = new Button (shell, SWT.PUSH);
        addItem.setText (\"Add Row\");
        data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.horizontalSpan = 2;
        addItem.setLayoutData(data);

        final Text text = new Text(shell, SWT.BORDER);
        text.setText (\"Vertical Scroll Visible - \");
        data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.horizontalSpan = 2;
        text.setLayoutData(data);


        addItem.addListener (SWT.Selection, new Listener () 
        {
            public void handleEvent (Event e) 
            {
                new TableItem(table, SWT.NONE).setText(\"item \" + count);
                count++;
            }
        });


        table.addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {
                Rectangle rect = table.getClientArea ();
                int itemHeight = table.getItemHeight ();
                int headerHeight = table.getHeaderHeight ();
                int visibleCount = (rect.height - headerHeight + itemHeight - 1) / itemHeight;
                text.setText (\"Vertical Scroll Visible - [\" + (table.getItemCount()>= visibleCount)+\"]\");

                      // YOUR CODE HERE
            }
        });


        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }

        display.dispose();
    }

}
>>输出 对于itemcount <可见行数 对于> =可见行数的项目数 注意-如果要使用paint事件,请尝试使计算保持最小,因为它经常被调用。 希望这会有所帮助。     
这对我有用:
 boolean isScrollVisible = table.getVerticalBar().getVisible();
 Point vBarSize = table.getVerticalBar().getSize();
 int width_diff = 
      current_width.x - totalColumnWidth - (isScrollVisible ? vBarSize.x : 0 );
    
我发现,在调整大小通知时,您可以将Scrollable的边界与工作区之间的差值考虑在内。任一尺寸上的差异都应表明存在滚动条。     

要回复问题请先登录注册