У меня есть окно с несколькими таблицами друг на друге, каждая с заголовком. Все таблицы и метки содержатся в композите под названием 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);
}
Прокрутка работает, когда мышь находится над меткой, а не когда она над столом. Что мне не хватает? Где еще мне задницу слушателю?