Wie implementiere ich MouseDragged richtig

sala

Mitglied
Wie bekomme ich eine saubere Navigation Maus muss gedrückt bleiben Button bewegt sich mit der Maus auf der X Achse
Code:
public void mouseMoved(MouseEvent me) {
        ispressed = true;
    }
Code:
    public void mousePressed(MouseEvent e) {
        System.out.print("Hallo");
        if(ispressed = true)
        {
        Dimension size = btnNewButton.getPreferredSize();
            btnNewButton.setBounds(e.getX(), 171, size.width, size.height);
        }
    }

Quellcode komplett
Code:
package testprogramm;

import java.awt.EventQueue;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JButton;

import java.awt.TextField;
import java.awt.Window;

import javax.swing.JTextField;

public  class test implements MouseListener, MouseMotionListener, ActionListener  {

    private JFrame frame;
    private JTextField textField;
    private static boolean ispressed = false;
    JButton btnNewButton = new JButton("");
 

    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                   
                    test window = new test();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
   
    /**
    * Create the application.
    */
    public test() {
        initialize();
    }

    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
        frame = new JFrame("MouseListener");
        frame.setBounds(100, 100, 575, 480);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
   

       
        btnNewButton.setIcon(new ImageIcon("C:\\Users\\ingos\\OneDrive\\Desktop\\eclipse\\bucket.png"));
       
        Dimension size = btnNewButton.getPreferredSize();
        btnNewButton.setBounds(59, 171, size.width,size.height);
        frame.getContentPane().add(btnNewButton);
       
        textField = new JTextField();
        textField.setBounds(69, 26, 177, 20);
        frame.getContentPane().add(textField);
        textField.setColumns(10);   
        btnNewButton.addMouseMotionListener(this);
        btnNewButton.addMouseListener(this);
    }
    @Override
    public void mouseDragged(MouseEvent e) {
        // TODO Auto-generated method stub
   
    }


    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub

       
       
    }


    @Override
    public void mousePressed(MouseEvent e) {
        System.out.print("Hallo");
        if(ispressed = true)
        {
        Dimension size = btnNewButton.getPreferredSize();
            btnNewButton.setBounds(e.getX(), 171, size.width, size.height);
        }
    }

      public void actionPerformed(ActionEvent e) { 
           
         
               
           
        }
    @Override
    public void mouseReleased(MouseEvent e) {
    //ispressed = false;
       
    }


    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void mouseMoved(MouseEvent me) {
        ispressed = true;
    }
    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        ispressed = true;
    }
}
 
Java:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;

public class Test {

    private JFrame frame;
    private JTextField textField;
    private JButton btnNewButton;

    private MouseMotionListener dragHandler = new MouseMotionListener() {
        @Override
        public void mouseDragged(MouseEvent e) {
            Dimension size = btnNewButton.getSize();
            Point p = e.getPoint();
            p = SwingUtilities.convertPoint(e.getComponent(), p, frame.getContentPane());           
            btnNewButton.setBounds(p.x - size.width/2, 171, size.width, size.height);
        }

        @Override
        public void mouseMoved(MouseEvent e) {
        }
    };

  
    /**
    * Create the application.
    */
    public Test() {
        initialize();
    }

    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
        btnNewButton = new JButton();
        btnNewButton.addMouseMotionListener(dragHandler);
        try {         
            URL url = new URL("https://upload.wikimedia.org/wikipedia/commons/2/2b/1_dfs.png");
            btnNewButton.setIcon(new ImageIcon(url));
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        }
      
        Dimension size = btnNewButton.getPreferredSize();
        btnNewButton.setBounds(59, 171, size.width,size.height);
      
        textField = new JTextField();
        textField.setBounds(69, 26, 177, 20);
        textField.setColumns(10); 

        frame = new JFrame("MouseListener");
        frame.setBounds(100, 100, 575, 480);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        frame.getContentPane().add(btnNewButton);
        frame.getContentPane().add(textField);

    }

    public void show() {
        frame.setVisible(true);
    }

    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {                 
                    Test window = new Test();
                    window.show();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
 
Bitte formuliere deine Frage etwas ausführlicher, packe deinen Code in Java-Tags und lies zuerst die FAQs, wie man Fragen richtig stellt usw.
 
Also i habe ein GUI Button diesen habe ich ein AchtionListener unf ein Mouse listener hinzugefügt
Code:
btnNewButton.addMouseMotionListener(this);
        btnNewButton.addActionListener(this);

Nun möchte ich wenn man auf den Button klickt das dieser Button wenn man gedrückt lässt mit der Maus auf der x Achse sich bewegt.

Code:
 public void actionPerformed(ActionEvent e) {
          
          System.out.print("Hallo");
              
          
        }
    @Override
    public void mouseReleased(MouseEvent e) {
    //ispressed = false;
        System.out.print("ich");
    }
Es funktioniert nicht wenn ich auf der Button klicke und gedrückt lasse dass dann mouse Relased für die Links Rechts bewegung ausgeführt wird. Erst wenn ich wieder los lasse geht es links rechts es soll aber gedrückt bleiben. Es wird wenn man gedrückt hält und die Maus begegt kein ich auf der Console ausgeführt
 
@mihe7
Ja Danke genau das habe ich gewollt. Ja habe es übersehen.
Jetzt muss ich das nur noch nach vollziehen damit ich weiß was gemacht wurde
Das ist schnell erklärt: die Maus bei gedrückter Taste bewegen nennt man Drag, dafür gibt es Events und dazugehörige Listener, konkret MouseMotionListener#mouseDragged. Ausschlaggebend ist also der Part:
Java:
        public void mouseDragged(MouseEvent e) {
            Dimension size = btnNewButton.getSize();
            Point p = e.getPoint();
            p = SwingUtilities.convertPoint(e.getComponent(), p, frame.getContentPane());          
            btnNewButton.setBounds(p.x - size.width/2, 171, size.width, size.height);
        }
Der Punkt des MouseEvents gibt die Position des Mauszeigers relativ zur linken oberen Ecke des JButtons an.

Zur Positionierung brauchst Du aber den Punkt relativ zur linken oberen Ecke des Containers, der den Button enthält. Daher wird die Koordinate erstmal konvertiert.

Abschließend wird der Button neu positioniert und zwar so, dass er sich horizontal mittig unter dem Mauszeiger befindet. Mehr ist das nicht.
 

Neue Themen


Zurück
Oben