JButton dnd

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo,

ich möchte einen JButton von einem JPanel auf ein anderes JPanel ziehen, Beide JPanels befinden sich auf einem JFrame,
ist das irgendwie möglich bzw. es muss ja nur so aussehen, wie wenn der JButton auf das andere JPanel gezogen wird,

Hintergrund ist der, dass ich wie in NetBeans oder in Eclipse mir eine Oberfläche erzeugen will und daher z.B.: JButtons auf ein anderes JPanel ziehen will,

lg und vielen Dank für die Antworten,
 
T

tuxedo

Gast
Möglich ist alles... Ein fertiges Kochrezept hab ich allerdings nicht. Ließ dich doch mal in's Drag'n'Drop ein.
 

PollerJava

Top Contributor
Bin gerade dabei, aber was mich ein bisschen stutzig gemacht hat ist, das es dafür weder auf der Sun- Seite noch sonstwo ein Beispiel mit einem JButton gibt, nur mit Text o.ä.

Ist der Code für Netbeans oder Eclipse nicht irgendwo erhältlich, genau so solls bei mir auch funktionieren,

Vielen dank,

lg
 
T

tuxedo

Gast
Naja, "was" du da herumziehst, ist doch fast schnuppe.
Ich hab vor 3 Jahren auch mal was gebastelt da hab ich ein JLabel auf dem ich ein Icon liegen hatte herumgezogen (hab das irgendwie über paint() gelöst glaub ich, is schon länger her). Ob's direkt mit einem JButton geht weiß ich nicht. Aber notfalls kannst du ja ein Bildchen vom Button nehmen und das rumziehen. Bein Loslassen wird dann halt an genau der stelle der JButton erstellt.

Geholfen hat mir damals das JavaBuch von Guido Krüger und Google..

- Alex
 

PollerJava

Top Contributor
Was halt mir ein bisschen sorgen macht, ist, dass ich z.B.: eben die JButtons "pixelgenau" plazieren können soll,
Daher muss ich irgendwie den JButton inauf der Maus haben und wenn ich dann die Maus auslasse, dann soll sich der JButton genau dort hin setzen, wo ich ebenb ausgelassen habe,

lg
 
T

tuxedo

Gast
Du stellst dich an. Du kennst doch die koordinaten der Maus? Und du kennst die Abmessungen des Buttons. Und ebenfalls weißt du wo sich der Mauszeigen relativ zur gedraggten Button-Grafik befindet. Mit dem wissen kannst du dann "pixelgenau" das ganze positionieren.

- Alex

p.s. btw: probieren geht über studieren.
 

PollerJava

Top Contributor
Ja das ist mir schon klar, das hab ich schon implementiert, wo ich anstehe ist, dass wenn ich rechts den JButton klicke und dann auf mein JPanel ziehe, eben der JButton an der Maus drannhängen soll (oder eben ein Bild von diesem Button)
da hab ich Probleme, da ich nicht weiß, wie ich das an den Mauszeiger anhängen soll,

lg
 
T

tuxedo

Gast
Ich schau mal ob ich meinen uralten Code noch finde... War zwar quick'n'dirty, aber vielleicht kannst du was mit anfangen.
 
T

tuxedo

Gast
Nö, hab ich leider doch nicht mehr. Aber ich erinner mich wie ich das gemacht hab:

Hatte eins von diesen Beispiel hier benutzt:

http://java.sun.com/docs/books/tutorial/uiswing/dnd/intro.html

Problem war, dass ich nur sowas hier
win32_CopyDrop.gif
angezeigt bekommen hab. Soweit dürftest du bis jetzt auch sein...

Okay, ich hab dann ein durchsichtiges JPanel über _alles_ drüber gelegt und hab in dem Panel nen MouseListener eingebaut. Jedesmal wenn ich also mein "dragging" mit der maus begonnen hab, hat's in dem Panel ein mousePressed() event ausgelöst. Ich hab dort dann geschaut ib's auch wirklich eine Drag'n'Drop Aktion ist und hab dann an exakt die Stelle in diesem durchsichtigen JPanel das Bildchen "gemalt" (paint hatte ich dort überschrieben), wo sich die Maus befindet. Und wenn ich die Maus losgelassen hab, hab ich das Panel einfach wieder "geleert". Fertig. War recht easy.

- Alex
 

PollerJava

Top Contributor
Vielen Dank für die Hilfe!! Die Seite oben hab ich mir eh auch schon durchgelesen, mal schau, ob ich weiter komm,

Vielen dank,
 

PollerJava

Top Contributor
Und das Bildchen hast du irgendwo auf dem JFrame gehabt? Ich frag mich nämlich gerade, wo ich so ein Bildchen von meinem JButton hernehmen könnte,
Am Besten wärs, wenn ich einen ScreenShot von dem JButton machen könnte, weil ich

1. den JButton von meinem DockingFrame "Prperties" in den "working- DockingFrame" ziehe und
2. im "working- DockingFrame den JButton bearbeite (größer, kleiner, farbe ändere usw.) und eben im "working- Frame auch wieder umherziehen (Pixelgenau plazieren) will,

lg
 
T

tuxedo

Gast
ich hab nix von nem JFrame gesagt... Prinzipiell ist es egal ob JFrame oder JInternalFrame oder sonstwas. Letztendlich arbeitest du im normalfall mit JPanels.

Und da hab ich auf einem extra, über allem liegenden, JPanel das Bildchen gezeichnet und immer an die aktuelle Mausposition verschoben wenn ich Drag'n'drop gemacht hab. Dazu hab ich glaub ich das Bildchen als ImageIcon auf ein JLabel gelegt und das im Transparenten JPanel herumgeschoben. So irgendwie.

Wo du das Bildchen hernimmst ist deine Sache. Sei halt kreativ.

- Alex
 

PollerJava

Top Contributor
Ich hab mir das Programm unten geschrieben, komm aber nicht drauf, wie ich den JButton auf einem JPanel verschieben kann, wohin ich will,
könnte mir da jemand helfen?

Vielen Dank,
lg
Code:
package com.com;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.awt.dnd.*;
import javax.swing.*;
 
public class Transfer extends JPanel implements DragGestureListener, DragSourceListener, DropTargetListener, Transferable
{
	protected JPanel source = new JPanel();
	protected JPanel target = new JPanel();
	protected Button button = new Button("Drag this button");	    
	protected Object object;
        protected JPanel mainPanel = new JPanel();
        static final DataFlavor[] supportedFlavors = { null }; 
             
        public Transfer ()
            {   
            mainPanel.setLayout(new BorderLayout());
            source.setLayout(null);
            button.setBounds(10,10,130, 60);
            source.add(button);          
            source.setPreferredSize(new Dimension(300,600));        
            target.setLayout(null);
            target.setPreferredSize(new Dimension(300,600));  
            mainPanel.add(source, BorderLayout.EAST);
            mainPanel.add(target, BorderLayout.WEST);  
            source.setBounds(0, 200, 200, 200);
            target.setBounds(220, 200, 200, 200);
            add(mainPanel);                
            DragSource dragSource = new DragSource();
            DropTarget dropTarget1 = new DropTarget(source, DnDConstants.ACTION_COPY, this);
            DropTarget dropTarget2 = new DropTarget(target, DnDConstants.ACTION_COPY, this);
            DragGestureRecognizer dragRecognizer1 = dragSource.createDefaultDragGestureRecognizer(button, DnDConstants.ACTION_COPY, this);               		     		
            }         
        static
            {
            try { supportedFlavors[0] = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType); }
            catch (Exception ex) { ex.printStackTrace(); }
            } 
    public Object getTransferData(DataFlavor flavor){ if (flavor.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) return object; else return null;}
    public DataFlavor[] getTransferDataFlavors() { return supportedFlavors; }
    public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType); }
    public void dragGestureRecognized(DragGestureEvent ev){ev.startDrag(null, this, this);}
    public void dragDropEnd(DragSourceDropEvent ev) { }
    public void dragEnter(DragSourceDragEvent ev) { }
    public void dragExit(DragSourceEvent ev) { }
    public void dragOver(DragSourceDragEvent ev) { object = ev.getSource(); }
    public void dropActionChanged(DragSourceDragEvent ev) { } 
    public void dragEnter(DropTargetDragEvent ev) { }
    public void dragExit(DropTargetEvent ev)      { }
    public void dragOver(DropTargetDragEvent ev)  { dropTargetDrag(ev); }
    public void dropActionChanged(DropTargetDragEvent ev) { dropTargetDrag(ev); }
    void dropTargetDrag(DropTargetDragEvent ev) { ev.acceptDrag(ev.getDropAction()); }
 
    public void drop(DropTargetDropEvent ev)
        {
        System.out.println("Methode drop wird aufgerufen");
        ev.acceptDrop(ev.getDropAction());
        try
            {
            Object target = ev.getSource();
            Object source = ev.getTransferable().getTransferData(supportedFlavors[0]);
            Component component = ((DragSourceContext) source).getComponent();
            Container oldContainer = component.getParent();
            oldContainer.setLayout(null);
            Container container = (Container) ((DropTarget) target).getComponent();
            container.setLayout(null);
            container.add(component);
            //oldContainer.validate();
            oldContainer.repaint();
            //container.validate();
            container.repaint();
            }
        catch (Exception ex) { ex.printStackTrace(); }
        ev.dropComplete(true);
       }
    
    public static void main(String[] args) {
	Transfer dm = new Transfer ();
	JFrame frame = new JFrame(); 
	frame.getContentPane().add(dm);	
        frame.setBounds(10,10,700, 700);
	frame.setVisible(true);
	}
 }
 
T

tuxedo

Gast
Das blickt ja kein schwein mehr... Ein paar Comments sind immer hilfreich...

Hab das ganze mal eben in 15min selbst gebaut, ohne irgendwas "durchzulesen" .. Einfach try&error und ein wenig Verstand.

Code:
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Transfer extends JPanel {
	
	
	
	JPanel elementPanel = new JPanel();
	JPanel dragPaintPanel = new JPanel();
	JButton button = new JButton("Hallo Welt");
	
	boolean currentlyDragging = false;

	public Transfer() {
		// absolutes Layout. Mit anderen Layouts wird's vermutlich wesentlich aufwendiger
		this.setLayout(null);
		
		elementPanel.setLayout(null);
		elementPanel.setOpaque(true);	// transparent
		elementPanel.setFocusable(false);	// nicht fokusierbar
		
		dragPaintPanel.setLayout(null);
		dragPaintPanel.setOpaque(true);	// transparent
		dragPaintPanel.setFocusable(false);	// nicht fokusierbar
		
		// beide Panels auf die gleiche Größe und Position bringen
		elementPanel.setBounds(0, 0, 800, 600);
		dragPaintPanel.setBounds(0, 0, 800, 600);
		
		// Button basteln
		button.setBounds(100, 100, 150, 21);
		button.setName("meinButton");
		
		// Visuelle Elemente hinzufügen
		elementPanel.add(button);
		
		
		
		
		dragPaintPanel.addMouseMotionListener(new MouseMotionListener(){
			
			public void mouseDragged(MouseEvent e) {
				
				System.out.println("Drag: "+e.getX()+"/"+e.getY());
				
				// schauen was denn da liegt wo wir versuchen zu draggen ...
				JComponent component = (JComponent) elementPanel.getComponentAt(e.getX(), e.getY());
				
				// Erstmal nur "JButtons" akzeptieren ....
				if (component instanceof JButton){
					System.out.println("Verschiebe: "+component.getName());
					
					// Die Komponente so positionieren, dasss der Mauszeiger immer in der Mitte ist
					component.setLocation(e.getX()-(component.getWidth()/2), e.getY()-(component.getHeight()/2));
					System.out.println(component.getName()+" now at x="+component.getBounds().x+" y="+component.getBounds().y);
					
					
				}
				
				System.out.println();
				
			}

			public void mouseMoved(MouseEvent e) {
				System.out.println("Move: "+e.getX()+"/"+e.getY());
				JComponent component = (JComponent) elementPanel.getComponentAt(e.getX(), e.getY());
				if (component instanceof JButton){
					System.out.println("... over: "+component.getName());
				}
				System.out.println();
			}
			
		});
		
		// Die Einfügereihenfolge ist wichtig... Sonst ist der Button "klickbar". Aber wir wollen
		// ihn ja nicht anklicken, sondern verschieben können.... Offensichtlich liegt das "zuletzt"
		// eingefügte Element "unten" .. Das was "oben" liegen soll, muss also als erstes rein.
		this.add(dragPaintPanel);
		this.add(elementPanel);
		
		
		
	}

	
	
	
	public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		
		frame.getContentPane().add(new Transfer());
		frame.setSize(800,600);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
	}
	
	
}

Known Bugs:

* Bewegt man die Maus beim draggen zu schnell, "verlässt" man den Einzugsbereich der Komponente und man hört auf sie zu verschieben.
* Habs nicht mit mehreren Komponenten getestet. Aber es könnt in der aktuellen implementierung sehr gut sein, dass das ganz gewaltig durcheinander gerät wenn man einen Button über einen anderen hinweg zieht.

Man müsste noch was einbauen mit dem man sich merkt "was" gerade gedragged wird und von da an, bis zum loslassen der maus _nicht mehr_ prüft was "drunter" liegt, sondern exakt das weiterverschiebt was man eh gerade schon schiebt.

- Alex
 

PollerJava

Top Contributor
Vielen Dank,
eigentlich hast Du recht, warum das ganze mir D&D wenns so auch geht,
es hat nur das D&D bei mir sehr gut funktioniert bis eben auf das "vervielfältigen",

Auf jeden Fall vielen Dank für Deine 15 min!!!!!

lg
 

lhein

Top Contributor
Einen Kostenvoranschlag macht man eigentlich bevor man einen Auftrag erteilt. Sonst trägst Du logischerweise alle Kosten in der entstandenen Höhe.

;)
 

PollerJava

Top Contributor
Alex, funkt. dein Beispiel auch wenn ich nur ein JPanel habe, ich verwende nämlich ein DefaultDockable pV = new DefaultDockable(); und da 2 JPanel übereinander zu plazieren war mir bis jetzt nicht möglich,

geht das irgendwie ohne 2 Panel?

lg
 
T

tuxedo

Gast
Sollte eigentlich gehen. Du kannst ja alles nach belieben verschachteln. Mach halt in dein Dockable ein "Master" JPanel mit Null-Layout und füge da dann meine zwei Panels ein.

Im übrigen ist meine Lösung sicher nicht das absolute und wahre. Da kann man sicher noch einiges verbessern. Aber in 15min "from scratch" war nicht mehr drin. Muss ja nebenbei noch Geld verdienen ;-)

- Alex
 

PollerJava

Top Contributor
Mein Problem ist ja auch, dass ich nicht alles setOpaque(true) machen kann, da ich im Hintergrund ein Bild habe und dieses nicht gelöcht werden darf, dass ist aber der Fall, wenn die 2 Panels übereinander nicht Durchsichtig sind,

Wisst ihr da eine Lösung?

lg
 
T

tuxedo

Gast
Sorry, Fehler vom Amt. Verwechlse das _immer_.
In Zeile 25 und 29 sollte es natürlich "false" heißen. Sieht man auch am Kommentar.

Mit ein wenig Hirnschmalz, oder wenn der nicht ausreicht, try&error, hättest du auch selbst drauf kommen können ;-) --> Mitdenken und nicht nur einfach blind kopieren....

Ein guter Softwareentwickler kopiert nicht nur (sofern er das überhaupt darf), er schaut "wie's" gemacht wird und versucht zu verstehen. Das ist genau das, was dir offensichtlich (merkt man wenn man hier im Forum etwas länger unterwegs ist) noch fehlt ;-)

- Alex
 
T

tuxedo

Gast
Weils mich jetzt selber "gefuchst" hat und ich das vielleicht auch nochmal selbst brauchen kann, hab ich's mal "erweitert" so dass es jetzt auch mit schnellen Mausbewegungen klappt (er merkt sich das zu draggende Element bis die Maustaste losgelassen wird). Auch dürfte es jetzt keine Probleme mit dem "über anderen Elemente hinwegschieben" geben.

Code:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Transfer extends JPanel {
	
	
	
	JPanel elementPanel = new JPanel();
	JPanel dragPaintPanel = new JPanel();
	JComponent currentDraggingElement = null;
	
	JButton button = new JButton("Hallo Welt");
	

	public Transfer() {
		// absolutes Layout. Mit anderen Layouts wird's vermutlich wesentlich aufwendiger
		this.setLayout(null);
		
		elementPanel.setLayout(null);
		elementPanel.setOpaque(false);	// transparent
		elementPanel.setFocusable(false);	// nicht fokusierbar
		
		dragPaintPanel.setLayout(null);
		dragPaintPanel.setOpaque(false);	// transparent
		dragPaintPanel.setFocusable(false);	// nicht fokusierbar
		
		// beide Panels auf die gleiche Größe und Position bringen
		elementPanel.setBounds(0, 0, 800, 600);
		dragPaintPanel.setBounds(0, 0, 800, 600);
		
		// Button basteln
		button.setBounds(100, 100, 150, 21);
		button.setName("meinButton");
		
		// Visuelle Elemente hinzufügen
		elementPanel.add(button);
		
		dragPaintPanel.addMouseMotionListener(new MouseMotionListener(){
			
			public void mouseDragged(MouseEvent e) {
				
				System.out.println("Drag: "+e.getX()+"/"+e.getY());
				
				if (currentDraggingElement==null){
				
					// schauen was denn da liegt wo wir versuchen zu draggen ...
					JComponent component = (JComponent) elementPanel.getComponentAt(e.getX(), e.getY());
					
					// Erstmal nur "JButtons" akzeptieren ....
					if (component instanceof JButton){
						
						currentDraggingElement = component;
						
					} 
					
				} else {
					System.out.println("Verschiebe: "+currentDraggingElement.getName());
					
					// Die Komponente so positionieren, dasss der Mauszeiger immer in der Mitte ist
					currentDraggingElement.setLocation(e.getX()-(currentDraggingElement.getWidth()/2), e.getY()-(currentDraggingElement.getHeight()/2));
					System.out.println(currentDraggingElement.getName()+" now at x="+currentDraggingElement.getBounds().x+" y="+currentDraggingElement.getBounds().y);
				}
				
				System.out.println();
				
			}

			public void mouseMoved(MouseEvent e) {
				System.out.println("Move: "+e.getX()+"/"+e.getY());
				JComponent component = (JComponent) elementPanel.getComponentAt(e.getX(), e.getY());
				if (component instanceof JButton){
					System.out.println("... over: "+component.getName());
				}
				System.out.println();
			}
			
		});
		
		dragPaintPanel.addMouseListener(new MouseListener(){

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

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

			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void mouseReleased(MouseEvent e) {
				currentDraggingElement=null;
			}
			
		});
		
		// Die Einfügereihenfolge ist wichtig... Sonst ist der Button "klickbar". Aber wir wollen
		// ihn ja nicht anklicken, sondern verschieben können.... Offensichtlich liegt das "zuletzt"
		// eingefügte Element "unten" .. Das was "oben" liegen soll, muss also als erstes rein.
		this.add(dragPaintPanel);
		this.add(elementPanel);
		
		
		
	}

	
	
	
	public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		
		frame.getContentPane().add(new Transfer());
		frame.setSize(800,600);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
	}
	
	
}
 

PollerJava

Top Contributor
Du wirst es kaum glauben, aber das habe ich schon vor deinem Post ausgebessert setOpaque(false) = durchsichtig,
hätte mir auch passieren können :)

so weit es mir möglich ist, kontrolliere ich den Code auf jeden fall,

ld und Danke für Deine Hilfe,


PS:
funktioniert super!!!!
 

PollerJava

Top Contributor
Morgen,

wenn ich auf dem JPanel 2 JButton habe, ist es da irgendwie möglich, wenn ich einen Jbutton anklicke, dass dieser irgendwie gekennzeichnet ist als angewählt und wenn ich den anderen anklicke, dass dann eben der andere als angeklickt makiert ist,
muss ich mir das ausprogrammieren oder geht das irgendwie über den Focus?

Vielen Dank,

lg
 
T

tuxedo

Gast
Hmm... In zeile 54 holst du dir ja das "unter dem Mauszeiger liegende Element".

Dieses Element kannst du dann nach seiner Hintergrundfarbe fragen und diese speichern. Während des draggens setzt du das dann beispielsweise auf "rot", und nach dem draggen wieder zurück auf die Ausgangsfarbe.

Code:
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DnDJButtonOnJPanel extends JPanel {
	
	
	
	JPanel elementPanel = new JPanel();
	JPanel dragPaintPanel = new JPanel();
	JComponent currentDraggingElement = null;
	
	JButton button = new JButton("Hallo Welt");
	protected Color originBgColor;
	

	public DnDJButtonOnJPanel() {
		// absolutes Layout. Mit anderen Layouts wird's vermutlich wesentlich aufwendiger
		this.setLayout(null);
		
		elementPanel.setLayout(null);
		elementPanel.setOpaque(false);	// transparent
		elementPanel.setFocusable(false);	// nicht fokusierbar
		
		dragPaintPanel.setLayout(null);
		dragPaintPanel.setOpaque(false);	// transparent
		dragPaintPanel.setFocusable(false);	// nicht fokusierbar
		
		// beide Panels auf die gleiche Größe und Position bringen
		elementPanel.setBounds(0, 0, 800, 600);
		dragPaintPanel.setBounds(0, 0, 800, 600);
		
		// Button basteln
		button.setBounds(100, 100, 150, 21);
		button.setName("meinButton");
		
		// Visuelle Elemente hinzufügen
		elementPanel.add(button);
		
		dragPaintPanel.addMouseMotionListener(new MouseMotionListener(){
			
			public void mouseDragged(MouseEvent e) {
				
				System.out.println("Drag: "+e.getX()+"/"+e.getY());
				
				if (currentDraggingElement==null){
				
					// schauen was denn da liegt wo wir versuchen zu draggen ...
					JComponent component = (JComponent) elementPanel.getComponentAt(e.getX(), e.getY());
					
					// Erstmal nur "JButtons" akzeptieren ....
					if (component instanceof JButton){
						originBgColor = component.getBackground();
						component.setBackground(Color.red);
						currentDraggingElement = component;
						
					} 
					
				} else {
					System.out.println("Verschiebe: "+currentDraggingElement.getName());
					
					// Die Komponente so positionieren, dasss der Mauszeiger immer in der Mitte ist
					currentDraggingElement.setLocation(e.getX()-(currentDraggingElement.getWidth()/2), e.getY()-(currentDraggingElement.getHeight()/2));
					System.out.println(currentDraggingElement.getName()+" now at x="+currentDraggingElement.getBounds().x+" y="+currentDraggingElement.getBounds().y);
				}
				
				System.out.println();
				
			}

			public void mouseMoved(MouseEvent e) {
				System.out.println("Move: "+e.getX()+"/"+e.getY());
				JComponent component = (JComponent) elementPanel.getComponentAt(e.getX(), e.getY());
				if (component instanceof JButton){
					System.out.println("... over: "+component.getName());
				}
				System.out.println();
			}
			
		});
		
		dragPaintPanel.addMouseListener(new MouseListener(){

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

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

			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void mouseReleased(MouseEvent e) {
				if (currentDraggingElement != null){
					currentDraggingElement.setBackground(originBgColor);
				}
				currentDraggingElement=null;
			}
			
		});
		
		// Die Einfügereihenfolge ist wichtig... Sonst ist der Button "klickbar". Aber wir wollen
		// ihn ja nicht anklicken, sondern verschieben können.... Offensichtlich liegt das "zuletzt"
		// eingefügte Element "unten" .. Das was "oben" liegen soll, muss also als erstes rein.
		this.add(dragPaintPanel);
		this.add(elementPanel);
		
		
		
	}

	
	
	
	public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		
		frame.getContentPane().add(new DnDJButtonOnJPanel());
		frame.setSize(800,600);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
	}
	
	
}
 

PollerJava

Top Contributor
So in die Richtung hab ich jetzt auch gedacht,
Mein Plan war ja, dass ich z.B.: einen JButton mit der Maus makiere (der JButton bleibt dann makiert) und dann z.B.: mit der "ENTF"- Taste wieder entfernen kann,

Ich hab aber jetzt umgeschwenkt und mir ein PopupMenü gemacht, das angezeigt werden kann, wenn ich über einen JButton bin und wenn ich im PopupMenü "Löschen" klicke, dann wird der JButton gelöscht,

Vielen Dank,
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JButton Konflikt mit Graphics Allgemeine Java-Themen 14
F JButton und ActionListener Allgemeine Java-Themen 3
H Schiffe versenken JButton Schiffe mit GUI verbinden Hilfe! Allgemeine Java-Themen 2
Aruetiise Interface Position durch JButton ermitteln Allgemeine Java-Themen 5
Aruetiise LayoutManager JButton in den Hintergrund Allgemeine Java-Themen 7
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
D AWT JButton und KeyAdapter Allgemeine Java-Themen 1
M JButton setEnabled(false) seltsames Ereignis Allgemeine Java-Themen 1
R via JButton in JTextArea printen Allgemeine Java-Themen 2
S Mit einem jButton eine andere Klasse öffnen Allgemeine Java-Themen 2
H JButton Ursprungsfarbe Allgemeine Java-Themen 2
Developer_X JButton Aktion Allgemeine Java-Themen 5
Developer_X JButton soll gar nichts machen Allgemeine Java-Themen 8
G Serialisieren eines JButton mit Icon Allgemeine Java-Themen 8
G JButton Allgemeine Java-Themen 7
S eigene Klasse die JButton extended - als Liste! Allgemeine Java-Themen 6
P JButton klonen Allgemeine Java-Themen 8
G Plug-in: Wie JButton einfügen? Allgemeine Java-Themen 12
M Swing JButton Farbe zurücksetzen Allgemeine Java-Themen 6
O JButton oder Checkboxes als Array ? Allgemeine Java-Themen 3
T Allgemeinklasse zu JPanel, JButton. Allgemeine Java-Themen 26
P eigener Thread für einen JButton Allgemeine Java-Themen 32
E JButton bleibt in der JTable Allgemeine Java-Themen 2
E JButton in einer Zelle von JTable Allgemeine Java-Themen 16
S JButton als Hyperlink ? Allgemeine Java-Themen 32
MQue JButton erkennen Allgemeine Java-Themen 2
MQue JButton an verschiedenen Variablen Allgemeine Java-Themen 2
MQue JButton zu JPanel hinzufügen Allgemeine Java-Themen 7
B Vermeiden das JButton schneller hintereinander drücken Allgemeine Java-Themen 3
G Hilfe - JButton in JTable (Spalte) einfügen! Allgemeine Java-Themen 6
M JButton verursacht einen HeapSpace Error? Allgemeine Java-Themen 6
N JList mit Mausklick auf einen JButton scrollen Allgemeine Java-Themen 28
thE_29 JButton einfärben Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben