swt - Desplazamiento de contenido de lienzo
eclipse-rcp mouseevent (1)
Sí, puedes hacerlo, pero así como eres completamente personalizado dibujando la tabla, también tendrás que administrar el efecto de desplazamiento. Puede agregar oyentes a las barras de desplazamiento y escuchar los cambios que realice el usuario en las posiciones de desplazamiento utilizando hBar.addSelectionListener()
. Tendrá que establecer los incrementos mínimo, máximo, de página y de pulgar en las barras de desplazamiento (tanto verticales como horizontales) para garantizar una experiencia realista.
Dibujé algunos textos y rectángulos en el lienzo.
package com.cavium.test.views;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;
public class Test2 {
protected static final int Y_STEP = 20;
static int shellStyle = SWT.NO_REDRAW_RESIZE | SWT.NO_BACKGROUND
| SWT.H_SCROLL | SWT.CLOSE | SWT.V_SCROLL | SWT.RESIZE;
static int canvasStyle = SWT.NO_REDRAW_RESIZE;// | SWT.H_SCROLL |
// SWT.V_SCROLL;
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display, shellStyle);
shell.setLayout(new FillLayout());
shell.setBackground(display.getSystemColor((SWT.COLOR_CYAN)));
shell.setText("Canvas Test");
shell.setSize(300, 200);
final Canvas canvas = new Canvas(shell, canvasStyle);
canvas.setLayout(new FillLayout());
canvas.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
final Point origin = new Point(10, 20);
final ScrollBar hBar = shell.getHorizontalBar();
Rectangle size = canvas.getBounds();
hBar.setMaximum(size.width);
hBar.setMinimum(0);
final ScrollBar vBar = shell.getVerticalBar();
hBar.setMaximum(size.height);
hBar.setMinimum(0);
// Create a paint handler for the canvas
canvas.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
// Do some drawing
e.gc.drawString("Rows", origin.x, origin.y);
e.gc.drawString("Data", 120, 20);
for (int i = 0; i < 10; i++) {
e.gc.drawString("Row Header" + (i + 1), origin.x, origin.y
+ (i + 1) * Y_STEP);
for (int j = 0; j < 10; j++) {
e.gc.drawRectangle(origin.x + 110 + (j * 20), origin.y
+ (i + 1) * Y_STEP, 20, 20);
e.gc.drawString("C" + (j + 1), origin.x + 110 + 2
+ (j * 20), origin.y + (i + 1) * Y_STEP + 1);
}
}
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
¿Es posible desplazarse solo por las celdas (C1, C2 ...) al arrastrar la barra de desplazamiento horizontal manteniendo el Encabezado de fila 1, el Encabezado de fila 2 ... etc. sin cambios? Ver instantánea a continuación
También avíseme cómo podemos detectar los eventos del mouse en las barras de desplazamiento, es decir, cuando el usuario hace clic en los botones arriba / abajo o flecha izquierda / flecha derecha, haga clic y arrastre pulgar, haga clic en el área entre el pulgar y la flecha derecha o el botón de flecha izquierda