SWT Draw2d - Mouseovereffekt

sven-ber

Mitglied
Hallo zusammen,

im Programm werden mittels Draw2d Figures gezeichnet. Die sollen später angeklickt werden können. Im Moment implementiere ich ein Mouseouvereffekt. Beim Mouseover über die Figure soll ein Focusrahmen um die Figure gezeichnet werden. Das funktioniert alles einwandfrei. Das ganze hat nur einen Schönheitsfehler: Wenn der Rahmen gezeichnet wird, wird das im Figure gezeichnete Rechteck um jeweils 1 Pixel nach unten und nach rechts verschoben. Was kann ich dagegen tun?

Java:
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FocusBorder;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseMotionListener;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.XYLayout;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import com.swtdesigner.SWTResourceManager;

public class ZZZ {
  public static void main(String args[]) {
    Shell shell = new Shell();
    final FocusBorder fb = new FocusBorder();
    
    LightweightSystem lws = new LightweightSystem(shell);
    Figure parent = new Figure();
    parent.setLayoutManager(new XYLayout());
    lws.setContents(parent);

    final Figure figure = new Figure();
    figure.setLayoutManager(new XYLayout());
    figure.addMouseMotionListener(new MouseMotionListener() {
		
		@Override
		public void mouseMoved(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void mouseHover(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void mouseExited(MouseEvent arg0) {
			figure.setBorder(null);
		}
		
		@Override
		public void mouseEntered(MouseEvent arg0) {
			figure.setBorder(fb);
			
		}
		
		@Override
		public void mouseDragged(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
	});
    
    RectangleFigure rectangle = new RectangleFigure();
    rectangle.setBackgroundColor(SWTResourceManager.getColor(192, 228, 243));
    figure.add(rectangle, new Rectangle(5, 5, 90, 90));
    
    parent.add(figure, new Rectangle(50, 50, 100, 100));

    shell.setSize(300, 300);
    shell.open();
    shell.setText("Example");
    Display display = Display.getDefault();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
  }
}

Gruß

Sven-ber
 

Atze

Top Contributor
kann es sein, dass dein rahmen 1 pixel stark ist?

dann vergrößert sich die figur doch komplett einen pixel, bzw wird höher. um sie dann am richtigen offset zu plazieren, muss sie ja um rahmenstärke nach unten und nach rechts verschoben werden. so würd ich mir das erklären. ist aber nur geraten
 

sven-ber

Mitglied
Ich habe das Problem mit zwei Layern behoben. In dem einem Layer werden alle anzuzeigenden Figures implementiert. Im anderen wird ein Figure implementiert, dessen Border gesetzt wird.
 

Ähnliche Java Themen

Neue Themen


Oben