Je suis en train de mettre à jour juste une partie d'une toile dans SWT, mais je ne comprends pas comment le faire.swt: Comment mettre à jour (redessiner) seulement une partie d'une toile
Je lis tht je dois utiliser le setClipping, la documentation dit en effet: « Définit la zone du récepteur qui peut être modifiée en tirant des opérations sur la zone rectangulaire spécifiée par l'argument Spécification NULL pour le rectangle reprend le. la zone de détourage du destinataire à sa valeur d'origine. "
donc j'ai juste essayé, mais sans succès, voici un exemple simple:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class SimpleCanvas {
boolean manualDraw=false;
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Canvas Example");
createContents(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
/**
* Creates the main window's contents
*
* @param shell the main window
*/
private void createContents(Shell shell) {
shell.setLayout(new FillLayout());
// Create a canvas
Canvas canvas = new Canvas(shell, SWT.NONE);
// Create a button on the canvas
Button button = new Button(shell, SWT.PUSH);
button.setBounds(10, 10, 300, 40);
button.setText("TEST");
button.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
manualDraw=true;
canvas.redraw();
break;
}
}
});
// Create a paint handler for the canvas
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
if (manualDraw){
e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_GREEN));
e.gc.setClipping(90,90,60,60);
e.gc.drawRectangle(90,90,30,30);
return ;
}
Rectangle rect = ((Canvas) e.widget).getBounds();
e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_RED));
e.gc.drawText("DRAW TEXT", 0, 0);
e.gc.dispose();
}
});
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new SimpleCanvas().run();
}
}
Pouvez-vous s'il vous plaît aidez-moi à comprendre ce que je fais mal?
Merci d'avance.
On ne sait pas ce que vous attendez. setClipping ne modifie que le GC actuel, donc dans votre exemple seul le drawRectangle est affecté. –
J'appréhende ce que j'ai écrit dans le titre .. Il suffit de mettre à jour une partie de la toile: en laissant la corde là et en ajoutant le rectangle ... Mais j'ai trouvé le problème auquel je vais répondre ... – navy1978