JButtons innerhalb eines JPanels verschieben (DRAG&DROP)

kiCk_mAsTer

Mitglied
Hallo Community,

ich habe ein kleines Problem und hoffe ihr könnt mir helfen.
Auf der ContentPane liegt ein JPanel, indem sich mehrere Buttons befinden, die zur laufzeit erzeugt werden. Ich möchte nun, dass es möglich ist, für den Anwender des Programms, die Position der erzeugten Button via "Drag&Drop" zu verändern. (Benutzer klickt auf einen bestimmten Button und kann ihn durch zeihen an die gewünschte Position bewegen)

Wäre sehr nett wenn sich jemand kurz die zeit nehmen könnte um mir zu helfen bzw. einen kleinen Code teil, wie es funktionieren könnte bereitstellen könnte. DANKE🙂
 
ich hab jetzt einfach mal etwas versucht. jedoch bugged das wie sau. Vielleicht sieht jemand den Fehler, bei dem was ich gerade probiert habe, falls nicht sind denoch Möglichkeiten, wie ich das verschieben umsetzten kann, erwünscht.

Java:
...
JButton tb=new JButton(buttonName);
                                 tb.addMouseMotionListener(new MyButtonMotionListener());
                                 tb.setFont(buttonFont);
                                 tb.setForeground(buttonColor);
                                 tb.setBounds(buttonKordY,buttonKordX,buttonWidth,buttonHeight);
...

Java:
 class MyButtonMotionListener implements MouseMotionListener {
        @Override
        public void mouseDragged(MouseEvent e) {
            if(e.getComponent() instanceof JButton){
                System.out.println(e.getX()+" X "+e.getY());
                e.getComponent().setBounds(e.getX(), e.getY(), e.getComponent().getHeight(), e.getComponent().getWidth());
            }
        }
        @Override
        public void mouseMoved(MouseEvent e) {

        }

    }

Wenn ich nun versuchen den Button zu verschieben befindet sich der meistens dann an einer anderen Position wieder. 🙁
Bitte um hilfe
 
hab jetzt das Problem lösen können.

Java:
class MyButtonMotionListener implements MouseMotionListener {
        @Override
        public void mouseDragged(MouseEvent e) {
            if(e.getComponent() instanceof JButton){
                System.out.println(e.getX()+" X "+e.getY());
                e.translatePoint(e.getComponent().getX(), e.getComponent().getY());
e.getComponent().setLocation(e.getX(), e.getY()); 
            }
        }
        @Override
        public void mouseMoved(MouseEvent e) {

        }

    }

die koordinaten müssen transformiert werden.

Denoch DANKE 🙂
 
Der Vollständigkeit halber:

Code:
import javax.swing.JButton;
import javax.swing.JFrame;

public class DragExample extends JFrame {
	public DragExample() {
		this.setLayout(null);
		JButton tb=new JButton("Drag&DropMe");
        tb.addMouseMotionListener(new MyButtonMotionListener());
        tb.setBounds(10,20,130,50);
        this.getContentPane().add(tb);
	}
	
	public static void main(String[] args) {
		JFrame frame = new DragExample();
		frame.setBounds(100, 100, 500, 500);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

Zudem solltest Du sicherstellen, dass die Maus mit dem Button nicht ausserhalb des Frames bewegt werden kann, ansonsten ist der Button beim Loslassen nicht mehr sichtbar.
 
Zuletzt bearbeitet:
Hallo Community,

ich habe ein kleines Problem und hoffe ihr könnt mir helfen.
Ich würde gerne ein Button erstellen der folgendes machen soll.
In meinem admin Bereich würde ich gerne zwei Button erstellen, einer soll die Farbe grün haben und der andere rot.
In meinem Userbereich möchte ich einen Button haben der gelb ist.
Es soll nun so sein, wenn ich im Admin bereich auf den grünen Button drücke soll der Button im userbereich im selben Augenblick sich in grün ändern und genau das gleiche mit dem roten. wie kann ich dass machen?
 
Hallo Community,

ich habe ein kleines Problem und hoffe ihr könnt mir helfen.
Ich würde gerne ein Button erstellen der folgendes machen soll.
In meinem admin Bereich würde ich gerne zwei Button erstellen, einer soll die Farbe grün haben und der andere rot.
In meinem Userbereich möchte ich einen Button haben der gelb ist.
Es soll nun so sein, wenn ich im Admin bereich auf den grünen Button drücke soll der Button im userbereich im selben Augenblick sich in grün ändern und genau das gleiche mit dem roten. wie kann ich dass machen?


Was meinst Du mit "Bereich"? Vorschlag: Erstelle im gleichen Frame zwei JTabbedPanes, eines mit dem Namen Admin und der andere mit dem Namen User. Für weitere Details siehe How to Use Tabbed Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 

Zurück
Oben