tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
748
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von wookenny
    wookenny wookenny ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    159
    Hallo,

    für die Uni schreibe ich grade meine erste graphische Oberfläche in Java.

    Habe folgendes Problem:

    Es sollen bei Klicks Punkte gemalt werden und wenn man von einem bereits gemalten Punkt zu einem anderen zieht, soll eine Linie dazwischen gemalt werden.

    Klappt unter Windows(hier bei mir alles wunderbar).
    Zum Punktmalen nehme mouseClicked.
    Zum Ziehen benutzte ich mousePressed als Anfang und mouseReleased als Ziel.

    Unter Unix wird wenn man nun die MouseTaste drückt und von a nach b zieht.
    Als erstes bei a ein mousePressed Event, dann bei b ein MouseReleasedEvent und danach noch ein MouseClickedEvent bei b.
    Win wirft hier nur MousePressed und MouseReleased.

    Dieser macht bei dem Programm ziemlich viel Ärger, man kann nämlich keine Linien markieren. Woher kommen die unterschiedlichen Events? was kann ich dagegen machen?

    Danke für die Zeit.
    schones Pfingstfest
    wookenny
     
    Ich bin zu neugierig, zu fragwürdig, zu übermütig, um mir eine faustgrobe Antwort gefallen zu lassen.
    Gott ist eine faustgrobe Antwort, eine Undelikatesse gegen uns Denker - im Grunde sogar ein faustgrobes Verbot an uns:
    ihr sollt nicht Denken!

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Unterschiedliche OS verarbeiten MouseEvents nun mal unterschiedlich, daran kann auch java nichts ändern. Wie wär's denn wenn du deinen Code so abänderst, dass du mittels mousePressed zwei Punkte markierst? Das funktioniert nämlich IMHO überall.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    Avatar von wookenny
    wookenny wookenny ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    159
    Hmmm.....

    Also ich möchte die Info der Art haben: Maus bei a geklickt und bei b losgelassen.
    Ich weiss nicht, wie ich das mit MousePressed hinbekommen kann.

    Ich könnte es natürlich auch so umbauen, das es auf Unix klappt, dann aber wäre unter Windows nicht mehr gut, das widerspricht ja dem schönen Javakonzept ja einwenig.

    mfg
    wookenny
     
    Ich bin zu neugierig, zu fragwürdig, zu übermütig, um mir eine faustgrobe Antwort gefallen zu lassen.
    Gott ist eine faustgrobe Antwort, eine Undelikatesse gegen uns Denker - im Grunde sogar ein faustgrobes Verbot an uns:
    ihr sollt nicht Denken!

  4. #4
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Vielleicht hilft Dir ja ein MouseMotionListener mit der Methode mouseDragged.
    Damit könntest Du ggf. die anderen Ereignisse überprüfen und nur die entsprechenden Aktionen auslösen.
     

  5. #5
    Avatar von wookenny
    wookenny wookenny ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    159
    Danke dir, aber das hilft nicht wirklich.
    Zum einen werden dann massig Events zuviel geschmissen, die ich nicht brauche.
    Zum anderen wird beim Loslassen der Maustaste wieder der böse MouseClicked Event geworfen.

    Aber ich hab da die Idee, das MouseClicked zu stören, indem MouseReleased die Zeit speichert und wenn MouseClicked in ner sehr geringen Abweichung kommt, leite ich das nicht weiter, das sollte klappen und auch unter beiden Betriebssystemen laufen.

    schöne Grüße
    (ich fahr jetzt zum Grill-Spielabend)
     
    Ich bin zu neugierig, zu fragwürdig, zu übermütig, um mir eine faustgrobe Antwort gefallen zu lassen.
    Gott ist eine faustgrobe Antwort, eine Undelikatesse gegen uns Denker - im Grunde sogar ein faustgrobes Verbot an uns:
    ihr sollt nicht Denken!

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Wie wär's denn damit?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.event.MouseMotionListener;
     
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
     
    /**
     * @author Tom
     * 
     */
    public class LineDemo extends JFrame {
     
        Point p0, p1;
     
        public LineDemo() {
            super("LineDemo");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    if (SwingUtilities.isRightMouseButton(e)) {
                        p0 = null;
                        p1 = null;
                        return;
                    }
     
                    if (p0 != null) {
                        p1 = e.getPoint();
                        getGraphics().drawLine(p0.x, p0.y, p1.x, p1.y);
                        p0 = p1;
                    } else {
                        p0 = e.getPoint();
                    }
     
                }
            });
     
            setSize(320, 240);
            setVisible(true);
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            new LineDemo();
        }
    }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  7. #7
    Avatar von wookenny
    wookenny wookenny ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    159
    Hab es jetzt schön hinbekommen.
    Jetzt läufts auf beiden Systemen optimal.
    Danke, dass du dir die Mühe gemacht hast Code zu schreiben.
    War allerdings nocht etwas anders als das, was ich meinte.
    (Ich wollte jeweils immer sowas wissen wie: Benutzer hat Mouse von a nach b gedragged.)

    Aber jetzt ist alles gut.
     
    Ich bin zu neugierig, zu fragwürdig, zu übermütig, um mir eine faustgrobe Antwort gefallen zu lassen.
    Gott ist eine faustgrobe Antwort, eine Undelikatesse gegen uns Denker - im Grunde sogar ein faustgrobes Verbot an uns:
    ihr sollt nicht Denken!

  8. #8
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Würdest Du für alle Leser Deine Umsetzung kurz skizzieren?
     

  9. #9
    Avatar von wookenny
    wookenny wookenny ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    159
    Ich verzichte jetzt völlig auf den MouseClickedEvent.
    Jetzt wird bei MousePressed, die x,y Position gespeichert und bei MouseReleased wieder verarbeitet.

    Wenn bei MouseRealesed dieselbe x,y ermittelt werden, wie sie vorher gespeichert wurden, wird die Methode, die MouseClicked aufrufen sollte, gerufen.
    Wenn es eine andere Position ist, wurde halt von der ersten zur 2.ten Position gezogen.

    Edit: Ich hatte mir erst noch was anderes überlegt, aber als ich heute morgen nach Hause kam, hatte einer der beiden anderen Gruppenmitglieder das geändert und auf den CVS Server geladen.
    Schöne Sache sowas, wenn man Nichts dran verändet und es plötzlich funktioniert.
    Zur Information wir schreiben ein Programm das bis jetzt so Dinge wie Dijkstra und Breitensuche und später noch viele weitere Graphen - und Netzwerkalgorithemn können soll.
    Geändert von wookenny (16.05.05 um 16:29 Uhr)
     
    Ich bin zu neugierig, zu fragwürdig, zu übermütig, um mir eine faustgrobe Antwort gefallen zu lassen.
    Gott ist eine faustgrobe Antwort, eine Undelikatesse gegen uns Denker - im Grunde sogar ein faustgrobes Verbot an uns:
    ihr sollt nicht Denken!

Ähnliche Themen

  1. Support fuer Postgresql in PHP unter XAMPP unter Windows aktivieren
    Von Thomas Darimont im Forum Hosting & Webserver
    Antworten: 2
    Letzter Beitrag: 24.08.10, 16:03
  2. Antworten: 8
    Letzter Beitrag: 17.07.07, 10:09
  3. Antworten: 0
    Letzter Beitrag: 13.12.06, 10:38
  4. Antworten: 3
    Letzter Beitrag: 11.01.06, 09:32
  5. Antworten: 0
    Letzter Beitrag: 28.04.04, 23:43