swt eclipse-rcp mouseevent eclipse-plugin

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