tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
756
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mal2000b mal2000b ist offline Mitglied
    Registriert seit
    Oct 2007
    Beiträge
    14
    hallo ich hab eine frage und zwar wie kann ich mit hilfe von
    java.awt.point und java.util.vector ein Applet oder eine Applikation zum Freihandzeichnen mit der maus schreiben?
     

  2. #2
    JDad JDad ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    25
    Was möchtest du machen? Freihandschreiben?
    Also so wie man im Winter normalerweise seinen Namen in den Schnee pinkelt? *g*

    Du musst einen MouseMotionListener oder so implementieren und dort die aktuelle Position des Mauszeigers feststellen und dort einen Punkt/Pixel setzen. Das geht mit der Methode drawLine() aus deinem Graphics-Kontext.

    Was du mit der Vector-Klasse willst, weiß ich momentan nicht. Evtl. zum Speichern bereits gezeichneter Punkte, um sie später wieder zu löschen? Sorry, aber deine Frage ist unverständlich gestellt. Was willst du überhaupt machen?

    Hier ist ein Beispiel jedoch mit einer geraden Linie von einem Startpunkt bis zum Loslassen der Maus.

    Ich hoffe das hilft Dir weiter.

    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
    
    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
     
    import javax.swing.JPanel;
     
    public class Freihandzeichnen extends Applet implements MouseListener
    {
        private static final long serialVersionUID = 1L;
        private JPanel drawPanel = new JPanel();
        private Point startPoint = new Point();
        
        @Override
        public void init() {
            setLayout(new BorderLayout());
            drawPanel.addMouseListener(this);
            add( drawPanel );
            setVisible( true ); 
        }
     
        public void mouseClicked(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e)  {}
     
        public void mousePressed(MouseEvent e) {
            startPoint.x = e.getX();
            startPoint.y = e.getY();
        }
     
        public void mouseReleased(MouseEvent e) {
            Graphics g = drawPanel.getGraphics();
            g.drawLine(startPoint.x, startPoint.y, e.getX(), e.getY());
        }
    }
     

  3. #3
    JDad JDad ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    25
    Habe mich gerade kurz hingesetzt und die o. g. Klasse etwas modifiziert. Sie ist aber nicht für Produktiveinsatz geeignet, da beim Resizen nicht repainted wird. Musst mal selbst gucken, wie du das machst. Ist normalerweise einfach...

    Hier soll vielmehr der Einsatz der Klassen Point und Vector demonstriert werden.

    Hast Du es Dir in etwa so vorgestellt?

    Hier der Code:

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    
    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;
    import java.util.Vector;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
    public class Freihandzeichnen extends Applet implements MouseMotionListener, ActionListener
    {
        private static final long serialVersionUID = 1L;
        private JPanel drawPanel = new JPanel();
        private Vector<Point> pointCache = new Vector<Point>();
        private JButton changeColorButton = new JButton("Change Color");
        private Graphics g;
        private Vector<Color> colorCache = new Vector<Color>();
        private Color cachedColor;
        
        @Override
        public void init() {
            setLayout(new BorderLayout());
            drawPanel.addMouseMotionListener(this);
            add( drawPanel, BorderLayout.CENTER );
            
            changeColorButton.addActionListener(this);
            add(changeColorButton, BorderLayout.SOUTH);
            colorCache.add(Color.RED);
            setVisible( true );
        }
     
        public void mouseDragged(MouseEvent e) {
            
            Point p = new Point(e.getX(), e.getY());
            g = drawPanel.getGraphics();
            // draw point
            g.drawLine(p.x, p.y, p.x, p.y);
            
            //cache drawed point
            pointCache.add(p);
        }
     
        public void mouseMoved(MouseEvent e) {}
     
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals(changeColorButton.getActionCommand())){
                changeColor();
            }
            
        }
        
        public void changeColor(){
            if(g != null){
                Point p;
                
                // get cached color
                cachedColor = colorCache.firstElement();
                
                // delete cached color
                colorCache.remove(0);
                
                // add current color
                colorCache.add(g.getColor());
                g.setColor(cachedColor);
                
                // change color for each point
                for(int i=0; i < pointCache.size(); i++ ){
                    p = pointCache.get(i);
                    g.drawLine(p.x, p.y, p.x, p.y);
                }
            }
        }
    }

    Und so sieht es aus: (siehe Anhang )
    Angehängte Grafiken Angehängte Grafiken  
     

  4. #4
    mal2000b mal2000b ist offline Mitglied
    Registriert seit
    Oct 2007
    Beiträge
    14
    hi danke für deine antwort
    eigentlich wollte ich sowas ähnliches haben
    http://www.electric-lemon.de/scribbleboard.php

    oder so
    http://www.stowlake.com/files/draw.html
    und vektor zum Speichern bereits gezeichneter Punkte.
    Geändert von mal2000b (23.10.07 um 19:16 Uhr)
     

  5. #5
    JDad JDad ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    25
    Wo ist das Problem? Mach das doch!

    Das, was ich dir gepostet hatte ist ja schon im weitesten Sinne das, was du willst. Du musst bedenken, dass ich es innerhalb von einer viertel Stunde schnell gemacht hatte. Wenn du was vernünftiges haben willst, musst du dir schon die Mühe machen, sich für einige Stunden hinzusetzen.

    Viel Erfolg noch!
     

Ähnliche Themen

  1. OOP und zeichnen
    Von Magixo im Forum Flash Plattform
    Antworten: 9
    Letzter Beitrag: 07.04.09, 12:26
  2. Zeichnen
    Von tom01 im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 19.07.06, 11:16
  3. Säulen Zeichnen, Drachen zeichnen
    Von RudeJava im Forum Photoshop
    Antworten: 34
    Letzter Beitrag: 17.07.05, 09:34
  4. Pad zum Zeichnen?
    Von Carndret im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 22.10.02, 18:09
  5. Was zum zeichnen?
    Von ernii im Forum Sonstige Grafik-Programme
    Antworten: 5
    Letzter Beitrag: 14.08.01, 13:31