SWT - прокрутка таблицы внутри ScrollComposite - PullRequest
0 голосов
/ 27 января 2020

У меня есть окно с несколькими таблицами друг на друге, каждая с заголовком. Все таблицы и метки содержатся в композите под названием tableComposite. Этот состав сам содержится внутри ScrollComposite, так что я могу прокручивать таблицы. Вот как я это сделал:

// Put the tables in a scroll composite so that the user can scroll through them vertically
ScrolledComposite sc = new ScrolledComposite(shell, SWT.V_SCROLL);
sc.setBounds(0, 100, width, 315);

// Create a composite where the tables will be displayed
Composite tableComposite = new Composite(sc, SWT.NONE);
int tableCompositeHeight = 0;

// Add a title label for the table
CLabel label1 = new CLabel(tableComposite, SWT.CENTER);
label1.setBackground(colour);
// ...
label1.pack();
label1.setBounds(0, 0, width, labelHeight);
tableCompositeHeight += labelHeight;

// Add the table
Table table = new Table(tableComposite, SWT.NONE);
int tableHeight = 0;
String[] titles = { "Col 1", "Col 2", "Col 3", "Col 4" };
for (String colName : titles) {
    TableColumn col = new TableColumn(table, SWT.NULL);
    col.setText(colName);
}
for (int loopIndex = 0; loopIndex < 20; loopIndex++) {
    TableItem item = new TableItem(table, SWT.NULL);
    item.setText("Item " + loopIndex);
    item.setText(0, "Item " + loopIndex);
    item.setText(1, "Yes");
    item.setText(2, "No");
    item.setText(3, "A table item");
    tableHeight += tableRowHeight;
}
for (TableColumn col : table.getColumns())
    col.pack();
table.setBounds(0, tableCompositeHeight, width, tableHeight);
tableCompositeHeight += tableHeight;

tableComposite.setBounds(0, 100, width, tableCompositeHeight);
sc.setContent(tableComposite);

А вот слушатель события MouseWheel:

// Add a listener to the ScrollComposite children to propagate the mouse wheel events
Listener scrollListener = new Listener() {
    public void handleEvent(Event e) {
        int wheelCount = e.count;
        wheelCount = (int) Math.ceil(wheelCount / 3.0f);
        while (wheelCount < 0) {
            sc.getVerticalBar().setIncrement(4);
            wheelCount++;
        }

        while (wheelCount > 0) {
            sc.getVerticalBar().setIncrement(-4);
            wheelCount--;
        }
    }
};
shell.addListener(SWT.MouseWheel, scrollListener);
label1.addListener(SWT.MouseWheel, scrollListener);
tableComposite.addListener(SWT.MouseWheel, scrollListener);
table.addListener(SWT.MouseWheel, scrollListener);
for (TableColumn col : table.getColumns()) {
    col.addListener(SWT.MouseWheel, scrollListener);
}
for (TableItem item : table.getItems()) {
    item.addListener(SWT.MouseWheel, scrollListener);
}

Прокрутка работает, когда мышь находится над меткой, а не когда она над столом. Что мне не хватает? Где еще мне задницу слушателю?

...