Hallo zusammen,
ich habe mir ein Programm geschrieben in dem per Drag&Drop ein Element aus einer Liste auf die Zeichenfläche verschoben wird. Das funktioniert soweit.
Das Problem ist:
A) ich muss die Fenstergröße ändern, bevor etwas angezeigt wird und
B) Das Bild fängt an zu flackern und schießt nach einer gewissen Zeit das Programm ab
Was kann ich dagegen tun?
Hier ist der Quellcode:
Mit freundlichen Grüßen,
Sven-ber
ich habe mir ein Programm geschrieben in dem per Drag&Drop ein Element aus einer Liste auf die Zeichenfläche verschoben wird. Das funktioniert soweit.
Das Problem ist:
A) ich muss die Fenstergröße ändern, bevor etwas angezeigt wird und
B) Das Bild fängt an zu flackern und schießt nach einer gewissen Zeit das Programm ab
Was kann ich dagegen tun?
Hier ist der Quellcode:
Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import com.swtdesigner.SWTResourceManager;
import app.gateviewer.canvas.Activator;
import app.gateviewer.data.datamanager.DataManager;
import app.gateviewer.data.objects.AbstractLogicalModule;
public class PaintScreen extends Canvas {
private Image newImage;
public PaintScreen(Composite parent, int style) {
super(parent, style);
setBounds(parent.getBounds());
Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
DropTarget target = new DropTarget(this, DND.DROP_MOVE);
target.setTransfer(types);
target.addDropListener(new DropTargetAdapter(){
@Override
public void drop(DropTargetEvent event) {
AbstractLogicalModule module =
DataManager.getObjectInstance().getModuleGateByKey(Integer.parseInt((String) event.data));
newImage = Activator.getImageDescriptor(module.getDefaultGate().getLogicalClass().getIconPath()).createImage();
redraw();
}
});
addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
if(newImage != null){
e.gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_DARK_RED));
e.gc.fillRectangle(getBounds());
e.gc.drawImage(newImage, 0, 0);
}
}
});
addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
redraw();
}
});
}
}
Mit freundlichen Grüßen,
Sven-ber
Zuletzt bearbeitet: