tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
717
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    munuel munuel ist offline Mitglied Silber
    Registriert seit
    Apr 2005
    Ort
    Wiesbaden (Hessen)
    Beiträge
    70
    Hallo ,
    Ich möchte auf einem Graphics2D einen String-Text markieren können und diesen mit der Maus verschieben können. Ich weiss aber nicht wie ich herausbekomme ob die Maus gerade den String berührt. Bei Figuren gibt es ja die .contains( ) Methode bei einem String aber nicht.

    Mein Gerüst sieht wie folgt aus:

    PHP-Code:
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;

    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class 
    TextMedia extends JPanel {

        private 
    String string = new String("hallo");
        private 
    Font ft = new Font(string,1,5);

        public 
    TextMedia(){
            
    addMouseListener(new MouseAdapter() {
                  public 
    void mousePressed(MouseEvent evt) {
                    
    int x evt.getX();
                    
    int y evt.getY();
                  }
                  public 
    void mouseClicked(MouseEvent evt) {
                    
    int x evt.getX();
                    
    int y evt.getY();
                    
    // wie kann ich hier herausfinden ob ich den String treffe?
                  
    }
                });
        }
        public static 
    void main(String[] args) {
            
    JFrame frm = new JFrame();
            
    frm.setBounds(100100400400);
            
    frm.setLayout(new GridLayout());
            
    TextMedia textMedia = new TextMedia();
            
    textMedia.setBounds(100100300300);
            
    frm.add(textMedia);
            
    frm.setVisible(true);
        }
        public 
    void paint(Graphics g){
            
    Graphics2D d = (Graphics2Dg;        
            
    d.drawString(string100100);
        }

    Viele Grüsse munuel
     

  2. #2
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    Hier ein kleines Beispiel um zu testen, ob die Maus auf dem Text liegt:
    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
    79
    
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
    /**
     * @author Jörg Weckbach
     *
     */
    public class TestPanel extends JPanel implements MouseListener{
        private Font font= null;
        private FontMetrics fm = null;
        private String text = "Text Test";
        private int xPos = 80;
        private int yPos = 50;
        public TestPanel(){
            font = new Font(Font.SERIF, Font.PLAIN,18);
            fm = getFontMetrics(font);
            this.addMouseListener(this);
            
        }
        public void paint(Graphics g){
            super.paint(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.setFont(font);
            g2.drawString(text, xPos,yPos);
            
        }
        
        
     
        
     
        public void mouseClicked(MouseEvent arg0) {
            Point mousePoint = arg0.getPoint();
            int with = fm.stringWidth(text);
            int height = fm.getHeight();
            Rectangle rec = new Rectangle(xPos,yPos-height,with,height);
            System.out.println("mousePosition:= "+mousePoint);
            System.out.println("string bounds := "+rec.getBounds());
            if(rec.contains(mousePoint)){
                System.out.println("contains point");
            }
            else{
                System.out.println("not contains point");
            }
        }
     
     
        public void mouseEntered(MouseEvent arg0) {}
     
     
        public void mouseExited(MouseEvent arg0) {}
     
     
        public void mousePressed(MouseEvent arg0) {}
     
     
        public void mouseReleased(MouseEvent arg0) {}    
        
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            TestPanel  p= new TestPanel();
            frame.getContentPane().add(p);
            frame.setSize(200,200);
            frame.setVisible(true);
        }
    }
     
     
    *grüssle*
    MeinerEiner
    Geändert von MeinerEiner_80 (07.02.07 um 11:24 Uhr)
     

  3. #3
    munuel munuel ist offline Mitglied Silber
    Registriert seit
    Apr 2005
    Ort
    Wiesbaden (Hessen)
    Beiträge
    70
    hi danke für die Hilfe Jörg,

    Ich hab an dem Beispiel mal weitergemach. Bin aber auf ein Problem gestossen.


    PHP-Code:
    package maus;

    /**
     * @author Chris Joh
     *
     */

    import java.awt.Container;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;

    import javax.swing.JFrame;
    import javax.swing.JPanel;


    /**
     * @author Jörg Weckbach
     *
     */
    public class TestPanel extends JPanel implements MouseListener MouseMotionListener{
        private 
    Font fontnull;
        private 
    FontMetrics fm null;
        private 
    String text "Text Test";
        private 
    int xPos 80;
        private 
    int yPos 50;
        private 
    boolean bTouche false;
        public 
    TestPanel(){
            
    font = new Font("TimesRoman"Font.PLAIN,18);
            
    fm getFontMetrics(font);
            
    this.addMouseListener(this);
            
        }
        public 
    void paint(Graphics g){
            
    super.paint(g);
            
    Graphics2D g2 = (Graphics2Dg;
            
    g2.setFont(font);
            
    g2.drawString(textxPos,yPos);
            
        }
        
        public 
    void mouseClicked(MouseEvent arg0) {
            
    Point mousePoint arg0.getPoint();
            
    int with fm.stringWidth(text);
            
    int height fm.getHeight();
            
    Rectangle rec = new Rectangle(xPos,yPos-height,with,height);
            
    System.out.println("mousePosition:= "+mousePoint);
            
    System.out.println("string bounds := "+rec.getBounds());
            if(
    rec.contains(mousePoint)){
                
    System.out.println("contains point");   
            }
            else{
                
    System.out.println("not contains point");
            }
        }

        public 
    void mouseEntered(MouseEvent arg0) {}

        public 
    void mouseExited(MouseEvent arg0) {}

        public 
    void mousePressed(MouseEvent arg0) {
            
    Point mousePoint arg0.getPoint();
            
    int with fm.stringWidth(text);
            
    int height fm.getHeight();
            
    Rectangle rec = new Rectangle(xPos,yPos-height,with,height);
            if(
    rec.contains(mousePoint)){         
                
    bTouche true;
            }
            else{         
                
    bTouche false;
            }
        }
       
        public 
    void mouseReleased(MouseEvent arg0) {}
        
        public 
    void mouseDragged(MouseEvent arg0){
            if (
    bTouche == true){        
                
    Point mousePoint arg0.getPoint();                         
                
    Graphics2D g = (Graphics2Dthis.getGraphics();
                
    g.setFont(font);            
                
    g.drawString(text,mousePoint.x,mousePoint.y);
                
    g.dispose();
            }            
        }

        public 
    void mouseMoved(MouseEvent arg0){
            
        }
        
        public static 
    void main(String[] args) {
            
    JFrame frame = new JFrame();
            
    TestPanel  p= new TestPanel();
            
    frame.getContentPane().add(p);
            
    frame.setSize(200,200);
            
    frame.setVisible(true);
            
            
    Container contentPane frame.getContentPane();
            
    contentPane.add(new MouseDragActionPanel());
            
        }

    Leider hab ich das Problem das die Funktion mouseDragged nie aufgerufen wird.
    Daher kann ich auch nicht die Position der Schrift verändern.
    Anscheinen ist ein String keine Componente die auf die Maus-Events reagiert
    Hat jemand vielleicht eine Lösung

    Viele Grüsse munuel
     

  4. #4
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    Ohne den Code jetzt weiter zu teste, würde ich behaupten, es liegt daran, dass du keinen MouseMotionListener registriert hast...

    *grüssle*
    MeinerEiner
     

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

    für Pixelgenaue "Anfasspunkte" würde sich auch folgendes anbieten:
    Code java:
    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
    79
    80
    81
    82
    83
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.font.GlyphVector;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.GeneralPath;
     
    import javax.swing.JFrame;
     
    /**
     * @author Tom
     * 
     */
    public class MoveStringThroughPointerExample extends JFrame {
     
        String s = "www.tutorials.de";
        GlyphVector glyphVector;
        Font font;
        int x = 100;
        int y = 200;
     
        public MoveStringThroughPointerExample() {
            super("MoveStringThroughPointerExample");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(640, 480);
            setVisible(true);
            font = getGraphics().getFont().deriveFont(Font.BOLD).deriveFont(36f);
            glyphVector = font.createGlyphVector(getGraphics().getFontMetrics()
                    .getFontRenderContext(), s);
            addMouseMotionListener(new MouseMotionAdapter() {
     
                int xOld = -1;
                int yOld = -1;
     
                @Override
                public void mouseDragged(final MouseEvent e) {
                    final Point point = e.getPoint();
                    final GeneralPath outline = (GeneralPath) glyphVector
                            .getOutline();
                    outline.transform(AffineTransform.getTranslateInstance(x, y));
                    if (outline.contains(point)) {
                        if (xOld != -1 && yOld != -1) {
                            final int dx = xOld - point.x;
                            final int dy = yOld - point.y;
                            x -= dx;
                            y -= dy;
                            repaint();
                        }
                    }
     
                    xOld = point.x;
                    yOld = point.y;
                }
     
                @Override
                public void mouseMoved(final MouseEvent e) {
                    xOld = -1;
                    yOld = -1;
                }
            });
        }
     
        @Override
        public void paint(final Graphics g) {
            super.paint(g);
            g.setFont(font);
            g.drawString(s, x, y);
        }
     
        /**
         * @param args
         */
        public static void main(final String[] args) {
            new MoveStringThroughPointerExample();
        }
    }

    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

  6. #6
    munuel munuel ist offline Mitglied Silber
    Registriert seit
    Apr 2005
    Ort
    Wiesbaden (Hessen)
    Beiträge
    70
    Hi,
    Vielen Dank für Eure Beiträge!
    @MeinerEiner
    Da hast du natürlich recht (Vergessen am MotionListener anzumelden), typischer Anfängerfehler.

    @Thomas
    Dein Bsp. ist sehr schön aber beim bewegen des Textes beim ziehen wird man immer wieder unterbrochen. (Vielleicht liegt das an der Pixelgenauigkeit).

    Ich hab mein Bsp. erweitert und es klappt ganz gut jetzt. Bis darauf das der Text beim ziehen etwas "schliert". Beim Bewegen wird nachgezeichnet. Gibt es da vielleicht noch einen Trick .


    PHP-Code:
    /**
     * @author Chris Joh
     *
     */

    import java.awt.Container;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;

    import javax.swing.JFrame;
    import javax.swing.JPanel;

    /**
     * @author Jörg Weckbach
     *
     */
    public class TestPanel extends JPanel implements MouseListener MouseMotionListener{
        private 
    Font fontnull;
        private 
    FontMetrics fm null;
        private 
    String text "Text Test";
        private 
    int xPos 80;
        private 
    int yPos 50;
        private 
    boolean bTouche false;
        private 
    boolean bDragged false;
        public 
    TestPanel(){
            
    font = new Font("TimesRoman"Font.PLAIN,18);
            
    fm getFontMetrics(font);
            
    this.addMouseListener(this);
            
    this.addMouseMotionListener(this);
            
        }
        public 
    void paint(Graphics g){
            
    super.paint(g);
            
    Graphics2D g2 = (Graphics2Dg;
            
    g2.setFont(font);
            
    g2.drawString(textxPos,yPos);       
        }
        
        public 
    void mouseClicked(MouseEvent arg0) {}
        public 
    void mouseEntered(MouseEvent arg0) {}
        public 
    void mouseExited(MouseEvent arg0) {}

        public 
    void mousePressed(MouseEvent arg0) {
            
    bDragged false;
            
    Point mousePoint arg0.getPoint();
            
    int with fm.stringWidth(text);
            
    int height fm.getHeight();
            
    Rectangle rec = new Rectangle(xPos,yPos-height,with,height);
            if(
    rec.contains(mousePoint)){         
                
    bTouche true;
            }
            else{         
                
    bTouche false;
            }
        }
       
        public 
    void mouseReleased(MouseEvent arg0) {
            if (
    bDragged){
            
    Point mousePoint arg0.getPoint(); 
             
    Graphics2D g = (Graphics2Dthis.getGraphics();
             
    xPos mousePoint.x;
             
    yPos mousePoint.y;
            
    g.drawString(text,xPos,yPos);
            
    g.dispose();
            
    this.repaint();
            }
        }
        
        public 
    void mouseDragged(MouseEvent arg0){
            if (
    bTouche == true){        
                
    Point mousePoint arg0.getPoint();        
                
    Graphics g getGraphics();
                
    g.setXORMode(getBackground());           
                
    g.drawString(text,mousePoint.x,mousePoint.y);
                
    g.dispose();        
                
    bDragged=true;          
            }      
        }

        public 
    void mouseMoved(MouseEvent arg0){
        }
        
        public static 
    void main(String[] args) {
            
    JFrame frame = new JFrame();
            
    TestPanel  p= new TestPanel();
            
    frame.getContentPane().add(p);
            
    frame.setSize(200,200);
            
    frame.setVisible(true);
            
            
    Container contentPane frame.getContentPane();
            
    contentPane.add(new MouseDragActionPanel());        
        }

    Viele Grüsse munuel
     

  7. #7
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    du solltest die draw Methoden nicht in den Event Methoden aufrufen. Sondern nur die Punkte aktualisieren:
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    
    /**
     * @author Chris Joh
     *
     */
     
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    /**
     * @author Jörg Weckbach
     *
     */
    public class TestPanel extends JPanel implements MouseListener , MouseMotionListener{
        private Font font= null;
        private FontMetrics fm = null;
        private String text = "Text Test";
        private int xPos = 80;
        private int yPos = 50;
        private boolean bTouche = false;
        private boolean bDragged = false;
        public TestPanel(){
            font = new Font("TimesRoman", Font.PLAIN,18);
            fm = getFontMetrics(font);
            this.addMouseListener(this);
            this.addMouseMotionListener(this);
            
        }
        public void paint(Graphics g){
            super.paint(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.setFont(font);
            g2.drawString(text, xPos,yPos);
            
        }
        
        public void mouseClicked(MouseEvent arg0) {}
        public void mouseEntered(MouseEvent arg0) {}
        public void mouseExited(MouseEvent arg0) {}
     
        public void mousePressed(MouseEvent arg0) {
            bDragged = false;
            Point mousePoint = arg0.getPoint();
            int with = fm.stringWidth(text);
            int height = fm.getHeight();
            Rectangle rec = new Rectangle(xPos,yPos-height,with,height);
            if(rec.contains(mousePoint)){         
                bTouche = true;
            }
            else{         
                bTouche = false;
            }
        }
       
        public void mouseReleased(MouseEvent arg0) {
            if (bDragged){
                Point mousePoint = arg0.getPoint(); 
                Graphics2D g = (Graphics2D) this.getGraphics();
                 xPos = mousePoint.x;
                 yPos = mousePoint.y;
                 this.repaint();
            }
        }
        
        public void mouseDragged(MouseEvent arg0){
            if (bTouche == true){        
                Point mousePoint = arg0.getPoint();        
                xPos = mousePoint.x;
                yPos = mousePoint.y;
                bDragged=true;  
                this.repaint();
            }      
        }
     
        public void mouseMoved(MouseEvent arg0){}
        
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            TestPanel  p= new TestPanel();
            frame.getContentPane().add(p);
            frame.setSize(200,200);
            frame.setVisible(true);
            
            Container contentPane = frame.getContentPane();
            //contentPane.add(new MouseDragActionPanel());        
        }
    }
     

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

    jo schaut ganz so aus als wäre die Pixelgenaue Variante doch nicht so das gelbe vom Ei...
    Code java:
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.RenderingHints;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.font.GlyphVector;
    import java.awt.geom.Rectangle2D;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
     
    import javax.swing.JFrame;
     
    /**
     * @author Tom
     * 
     */
    public class MoveStringThroughPointerExample extends JFrame {
     
        String s = "www.tutorials.de";
        GlyphVector glyphVector;
        Font font;
        int x = 100;
        int y = 200;
     
        Rectangle outline;
     
        Runnable renderer = new Runnable() {
            public void run() {
                while (true) {
     
                    Graphics2D g = (Graphics2D) getBufferStrategy()
                            .getDrawGraphics();
                    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
                    g.setFont(font);
                    g.clearRect(0, 0, getWidth(), getHeight());
                    g.drawString(s, x, y);
                    if (outline != null) {
                        g.draw(outline);
                    }
                    g.dispose();
                    getBufferStrategy().show();
     
                    try {
                        TimeUnit.MILLISECONDS.sleep(50L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
     
                }
            }
        };
     
        public MoveStringThroughPointerExample() {
            super("MoveStringThroughPointerExample");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(800, 600);
            setVisible(true);
            font = getGraphics().getFont().deriveFont(Font.BOLD).deriveFont(72f);
            glyphVector = font.createGlyphVector(getGraphics().getFontMetrics()
                    .getFontRenderContext(), s);
            addMouseMotionListener(new MouseMotionAdapter() {
     
                int xOld = -1;
                int yOld = -1;
     
                @Override
                public void mouseDragged(final MouseEvent e) {
                    final Point point = e.getPoint();
                    Rectangle2D visualBounds = glyphVector.getVisualBounds();
                    outline = new Rectangle(x + (int) visualBounds.getX(), y
                            + (int) visualBounds.getY(), (int) visualBounds
                            .getWidth(), (int) visualBounds.getHeight());
                    if (outline.contains(point)) {
                        if (xOld != -1 && yOld != -1) {
                            final int dx = xOld - point.x;
                            final int dy = yOld - point.y;
                            x -= dx;
                            y -= dy;
                        }
                    }
     
                    xOld = point.x;
                    yOld = point.y;
                }
     
                @Override
                public void mouseMoved(final MouseEvent e) {
                    xOld = -1;
                    yOld = -1;
                    outline = null;
                }
            });
     
            createBufferStrategy(2);
            Executors.newSingleThreadExecutor().execute(renderer);
        }
     
        /**
         * @param args
         */
        public static void main(final String[] args) {
            new MoveStringThroughPointerExample();
        }
    }

    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

  9. #9
    MeinerEiner_80 Tutorials.de Gastzugang
    So, und wenn wir jetzt noch ein bisserl beim Thomas klauen *grins* und uns ebenfalls die alten Koordinanten merken, verschiebt sich der Text auch nicht mehr beim ziehen:
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    /**
     * @author Jörg Weckbach
     *
     */
    public class TestPanel extends JPanel implements MouseListener , MouseMotionListener{
        private Font font= null;
        private FontMetrics fm = null;
        private String text = "Text Test";
        private int xPos = 80;
        private int yPos = 50;
        private int xOld = -1;
        private int yOld =-1;
        private boolean bTouche = false;
        private boolean bDragged = false;
        public TestPanel(){
            font = new Font("TimesRoman", Font.PLAIN,18);
            fm = getFontMetrics(font);
            this.addMouseListener(this);
            this.addMouseMotionListener(this);
            
        }
        public void paint(Graphics g){
            super.paint(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.setFont(font);
            g2.drawString(text, xPos,yPos);
            
        }
        
        public void mouseClicked(MouseEvent arg0) {}
        public void mouseEntered(MouseEvent arg0) {}
        public void mouseExited(MouseEvent arg0) {}
     
        public void mousePressed(MouseEvent arg0) {
            bDragged = false;
            Point mousePoint = arg0.getPoint();
            int with = fm.stringWidth(text);
            int height = fm.getHeight();
            Rectangle rec = new Rectangle(xPos,yPos-height,with,height);
            if(rec.contains(mousePoint)){         
                bTouche = true;
            }
            else{         
                bTouche = false;
            }
        }
       
        public void mouseReleased(MouseEvent arg0) {
            if (bDragged){
                Point mousePoint = arg0.getPoint(); 
                Graphics2D g = (Graphics2D) this.getGraphics();
                if((xOld != -1)&&(yOld!= -1)){
                    int dx = xOld - mousePoint.x;
                    int dy = yOld - mousePoint.y;
                    xPos -= dx;
                    yPos -= dy;
                }
                xOld = mousePoint.x;
                yOld = mousePoint.y;
                //g.drawString(text,xPos,yPos);
                 //g.dispose();
                this.repaint();
            }
        }
        
        public void mouseDragged(MouseEvent arg0){
            if (bTouche == true){        
                Point mousePoint = arg0.getPoint();        
                if((xOld != -1)&&(yOld!= -1)){
                    int dx = xOld - mousePoint.x;
                    int dy = yOld - mousePoint.y;
                    xPos -= dx;
                    yPos -= dy;
                }
                xOld = mousePoint.x;
                yOld = mousePoint.y;
                bDragged=true;  
                this.repaint();
            }      
        }
     
        public void mouseMoved(MouseEvent arg0){
            xOld = -1;
            yOld = -1;
        }
        
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            TestPanel  p= new TestPanel();
            frame.getContentPane().add(p);
            frame.setSize(200,200);
            frame.setVisible(true);
            
            Container contentPane = frame.getContentPane();
            //contentPane.add(new MouseDragActionPanel());        
        }
    }

    *grüssle*
    MeinerEiner
    Geändert von MeinerEiner_80 (08.02.07 um 12:24 Uhr)
     

  10. #10
    munuel munuel ist offline Mitglied Silber
    Registriert seit
    Apr 2005
    Ort
    Wiesbaden (Hessen)
    Beiträge
    70
    Ja super Danke,

    Thomas und MeinerEiner_80

    Habe Viel gerlernt

    Gruss munuel
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 20.09.08, 17:04
  2. Antworten: 7
    Letzter Beitrag: 29.09.06, 22:45
  3. Antworten: 4
    Letzter Beitrag: 11.07.05, 16:02
  4. Antworten: 2
    Letzter Beitrag: 05.01.05, 04:07
  5. Antworten: 1
    Letzter Beitrag: 05.06.02, 13:00