Estoy tratando de cambiar el cursor cuando comienzo una operación. Quiero que el cursor se muestre ocupado hasta que la operación finalice. Tengo una clase separada para el OperationListener. No estoy seguro de cómo asignar el cursor?SWT - Mostrando un Cursor ocupado
llamada desde la clase AplotBaseDialog
listOp.addOperationListener(new MyOperationListener(this) {
etc....
}
clase separada
public abstract class MyOperationListener implements InterfaceAIFOperationListener {
Cursor busyCursor = null;
AplotBaseDialog w = null;
public MyOperationListener(AplotBaseDialog win) {
**Should this not be getCurrent?**
busyCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_WAIT);
w = win;
} // end constructor
public void startOperation(String startMessage) {
** should this be getting a Shell form the AplotBaseDialog? **
w.???.setCursor(busyCursor);
} // end startOperation()
public void endOperation() {
try {
endOperationImpl();
}
finally {
w.???.setCursor(null);
}
} // end endOperation()
abstract protected void endOperationImpl();
} // end class MyOperationListener
EDITAR
plotButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
BusyIndicator.showWhile(Display.getDefault(), new Runnable(){
public void run(){
startPrinterListOperation();
}
});
}
});
EDITAR
private void startPrinterListOperation() {
listOp = new AplotPrinterListOperation(appReg.getString("aplot.message.GETPRINTERLIST"), session);
listOp.addOperationListener(new MyOperationListener(this) {
public void endOperationImpl() {
try {
printers.clear();
printers.addAll((ArrayList<PrinterProfile>) listOp.getPrinters());
Display.getDefault().asyncExec(new Runnable() {
public void run() {
showAplotPlotterDialog();
}
});
}
finally {
listOp.removeOperationListener(this);
listOp = null;
}
}
});
session.queueOperation(listOp);
} // end startPrinterListOperation()
Básicamente, simplemente agregué las líneas anteriores a mi método de operación, ya que comenzó justo antes de que se abriera el cuadro de diálogo y parece que funciona. Realmente desearía haber descubierto cómo hacerlo funcionar en la clase de operación abstracta. Pero esto parece tener el mismo efecto. - Gracias – jkteater