Sensei: Graphics mit MouseMoved ==> Leyereffekt?

Hi!

Ich stehe vor folgendem problem:

Ich will auf einem Graphicsobjekt bei MouseMoved etwas einblenden (ein Rectangle).
Funktioniert auch wunderbar, nur bleibt wenn ich die Maus weiterbewege auch das rectangle von allen vorigen Maus-Positionen erhalten.

Das soll aber nicht so sein, das Rectangle sollte wie ein Layer nur der Mausposition folgen und wenn sich das Rectangle weiterbewegt soll an den  STellen wo es vorher gezeichnet war (und jetzt nicht mehr) wieder die Grafik von ganz vorher hin.

Kommt halbwegs rüber was ich meine? Wer kann mir helfen?

Ich habe im Moment:

Graphics g = getGraphics();
g.setColor(Color.red);
g.fillRect(evt.getX(),evt.getY(),50,15);

Vielen Dank, cu, Sensei

  1. Hallo Sensei,

    Du musst die paint(Graphics)-Methode der entsprechenden Komponente überladen, so dass dort das Rechteck an die richtige Stelle gezeichnet wird.

    In der Eventhandler-Methode musst Du dann nur die Koordinaten ändern und repaint() aufrufen.

    Grüße

    Daniel

    1. Hallo!

      Naja... das problem ist dass in paint() - die ich bereits überlade - bereits ziemlich viel berechnet & gemlat wird... also läuft es auf diese weise nicht!

      Gibts irgendeine möglichkeit eine "layer-mäßige" grafik zu definieren die ein und ausgeblendet werden kann?

      thx

      1. Hallo Sensei,

        paint(Graphics) ist aber nun mal die Methode, die für's Zeichnen zuständig ist und die immer aufgerufen wird, wenn etwas neu gezeichnet werden muss.
        "Da steht aber schon so viel Code drin" ist ein schelchtes Argument.
        Dann musst Du das eben geschickter umsetzen. Die Methode muss das Zeichnen ja nicht direkt übernehmen, sie kann es auch anstoßen.

        Wenn Du Dir das zu umständlich ist, kannst Du Dich nach einer Vektorgraphikbibliothek umsehen, die Dir das abnimmt und wo Du nur ein Datenmodell manipulieren musst.
        Das einzige, was mir da im Moment einfällt ist Batik.
        Das ist eine Bibliothek um SVG-Graphiken darzustellen, da musst Du dann also nur per DOM den SVG-Quelltext verändern.
        Ob das allerdings das Richtige für Deine Anwendung ist, weiß ich nicht.

        Grüße

        Daniel

        1. ok, das is mir dann doch etwas zu viel. obwohl ich an batik auch schon gedacht hatte!

          habs jetzt so gelöst dass ich JPanel erweitert habe und getToolTipText() überschrieben habe.

          Ist zwar nicht exakt was ich wollte (vor allem ärgert es mich dass ich keine mehrzeiligen Tooltips hinbekomme & dass eine kurze Zeit vergeht bis der Tooltip kommt & dass der Tooltip nicht der Maus folgt) aber es is schon mal halbwegs was.

          wenn du (oder sonst jemand) noch Lösungen für meine Probleme in der Klammer haben, nur her damit :-)

          cu

          1. Hallo Sensei,

            Tooltips sind natürlich auch was ganz anderes. Die werden ja nicht von der Komponente selbst gezeichnet, sondern sind eigene Fenster. (Das merkst Du schon daran, dass sie über das Anwendungsfenster hinausgehen können.)

            Wenn Du also etwas ähnliches machen willst, kannst Du natürlich einfach ein JWindow an der entsprechenden Stelle anzeigen.

            Grüße

            Daniel