Moin
Ich bin jetzt seit 5 Stunden am Suchen und langsam irgendwie verzweifelt...ich habe für die Gui an der ich aktuell arbeite ein neues Widget (abgeleitet von einem Canvas) implementiert, welches einige Sachen drawt usw. Bei ihnen allen ist als Style gesetzt SWT.NO_BACKGROUND
Von den Widgets gibts es mehrere auf der Shell, die durch ein GridLayout angeordnet werden.
Auf der Shell habe ich nun noch einen PaintListener implementiert, der beim PaintEvent Linien zeichen. Die Start- bzw. Endpunkte dieser Linien sind abhängig von den Widgets und sollen auch unter diesen hindurch / auf diesen drauf verlaufen. Quasi werden die gemalten Elemente der Widgets durch diese Linien verbunden, bzw. es sollte so sein.
Problem ist leider, dass die Linien auf der Shell hinter den Widgets nicht angezeigt werden, auch wenn diese keinen Hintergrund haben sollten.
Wenn ich nun einen Button verwende, der die Visibility der widgets toggelt, dann sind die Linien nach unsichtbar und wieder sichtbar machen komischerweise richtig da.
Gibt es da eine Möglichkeit diesem Problem aus dem Weg zu gehen oder dies zu lösen? Mir fehlen mittlerweile echt die Ideen was ich noch machen kann.
Im Folgenden Ausschnitte des Codes:
Widget
Main
Sry, ich habe aber mal diverse Sachen entfernt, die hier nicht von Belang sind, sodass man sich nur etwas vorstellen kann, wie der Code so aussehen soll.
MfG Glynx
Ich bin jetzt seit 5 Stunden am Suchen und langsam irgendwie verzweifelt...ich habe für die Gui an der ich aktuell arbeite ein neues Widget (abgeleitet von einem Canvas) implementiert, welches einige Sachen drawt usw. Bei ihnen allen ist als Style gesetzt SWT.NO_BACKGROUND
Von den Widgets gibts es mehrere auf der Shell, die durch ein GridLayout angeordnet werden.
Auf der Shell habe ich nun noch einen PaintListener implementiert, der beim PaintEvent Linien zeichen. Die Start- bzw. Endpunkte dieser Linien sind abhängig von den Widgets und sollen auch unter diesen hindurch / auf diesen drauf verlaufen. Quasi werden die gemalten Elemente der Widgets durch diese Linien verbunden, bzw. es sollte so sein.
Problem ist leider, dass die Linien auf der Shell hinter den Widgets nicht angezeigt werden, auch wenn diese keinen Hintergrund haben sollten.
Wenn ich nun einen Button verwende, der die Visibility der widgets toggelt, dann sind die Linien nach unsichtbar und wieder sichtbar machen komischerweise richtig da.
Gibt es da eine Möglichkeit diesem Problem aus dem Weg zu gehen oder dies zu lösen? Mir fehlen mittlerweile echt die Ideen was ich noch machen kann.
Im Folgenden Ausschnitte des Codes:
Widget
Java:
public class MatchWidget extends Canvas {
public MatchWidget(Composite parent, ...) {
super(parent, SWT.NO_BACKGROUND);
GridData gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
...GridData einstellen...
this.setLayoutData(gd);
addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
paint(e);
}
});
}
private void paint(PaintEvent e){
GC gc = e.gc;
...male Widget...
gc.dispose();
}
...sonstige Methoden, nicht relevant...
}
Main
Java:
public class Main implements PaintListener, SelectionListener {
private Display display;
private Shell shell;
Button b;
...
Main() {
display = new Display();
shell = new Shell(display);
shell.setText("Blubb");
shell.addPaintListener(this);
createGUI();
shell.setSize(1000, 1000);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private void createGUI() {
...erstelle tolle widgets usw...
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
@Override
public void widgetSelected(SelectionEvent e) {
...handle selection events...
}
public void paintLines(PaintEvent e) {
GC gc = e.gc;
...verschiedene Linien mit gc.drawLine zeichnen...
}
@Override
public void paintControl(PaintEvent e) {
paintLines(e);
}
Sry, ich habe aber mal diverse Sachen entfernt, die hier nicht von Belang sind, sodass man sich nur etwas vorstellen kann, wie der Code so aussehen soll.
MfG Glynx