Überlappung zweier Komponenten

Sunchezz

Bekanntes Mitglied
Hallo liebe Leutchens!

Ich wende mich nun mal in einem neuen Thread an euch, da das ursprüngliche Thema sich meiner Meinung nach erledigt hat. Das neue ist zwar ähnlich aber nun ja!
Vielleicht ist ja eine aktuellere Beschreibung doch mehr hilfreich.
Wer sich den alten Thread noch anschauen will um die gesamtproblematik mehr zu verstehen:
altes Thema

Nun zum eigentlichen Problem:

Ich möchte eine Component in einem Container mit der Maus bewegen.
Wenn diese Component nun aber selbst ein richtiger Container, wie z.B. ein ScrollPane oder so ist, kann ich sie ja nicht greifen, da der MouseListener natürlich nur die innenliegende Komponente (eventuell eine Table oder so) als Quelle erkennt.
Demnach kann ich dieses Element nicht verschieben.

Mein bisher einfachster Ansatz:
Aus der Component temporär ein Bild machen, dadurch werden auch alle anderen Komponenten dargestellt, und danach kann wieder alles normal dargestellt werden.
Leider habe ich das mir unerklärliche Phänomen, das wenn ich diese BildComponent verschiebe und dabei über andere Komponenten ziehe, das das Bild dann flackert (genauer gesagt werden die darunterliegende Component und das Bild abwechselnd dargestellt)

Eine vielleicht nich ganz unwichtige Info:
Das Panel welches die verschiebbaren Komponenten enthält, liegt selbst in einem LayeredPane.
wird eine Komponente ausgewählt, wird sie Kurzfristig aus dem eigentlichen Panel entfernt, auf ein durchsichtiges Panel geadded. Dann wird das durchsichtige Panel im LayeredPane nach vorne geholt, und die Komponenten sind ganz normal Sichtbar. Nach dem Loslassen, das ganze wieder andersrum.
Der Grund für zwei Panels ist, das ich das ganze innerhalb eines Layouts mache und beim Verschieben eine Vorschaukomponente dargestellt werden soll, wo die Komponente landet wenn man loslässt ( ich glaub ich musses nicht erwähnen, aber ich tus trotzdem. Würde ich es in einem Panel machen würde die Layoutaktualisierung die Komponente die man grade zieht bei jeder Bewegung flackernd wieder an den Ursprungsort zurückspringen lassen)

Was mich an dem ganzen so verwirrt: Wenn ich anstatt dem LayeredPane ein Panel, und als zweitPanel, das standard GlassPane nehme, funktionierts wunderbar flackerfrei!

Ich hoffe das jemand eine Idee hat woran das liegt!
 

André Uhres

Top Contributor
Wenn diese Component nun aber selbst ein richtiger Container, wie z.B. ein ScrollPane oder so ist, kann ich sie ja nicht greifen
...
Mein bisher einfachster Ansatz: Aus der Component temporär ein Bild machen

Für mich macht das keinen wesentlichen Unterschied, denn auf den Container zugreifen musst Du ja in beiden Fällen, oder wie meinst Du das?

Gruß,
André

PS: das Flackern könnte damit zusammenhängen, dass die "mouseDragged" Ereignisse in Bezug auf die Komponente erzeugt werden und die Komponente sich gleichzeitig mit der Maus bewegt.
 
Zuletzt bearbeitet:
V

vanny

Gast
Ich denke auch, dass das Flackern vom mouseDragged-Event herrührt.
Ich würde mir bei MousePressed eine Flag setzen und dann einen seperaten Thread starten, der deine Bildverschiebungsgeschichte regelmäßig neu zeichnet.
Bei MouseDragged geschieht das ja immer nur dann, wenn du die Maus bewegst.

Gruß Vanny
 

Sunchezz

Bekanntes Mitglied
Ui, danke schonma für die Antwort, dachte schon es kommt nichts mehr!

Für mich macht das keinen wesentlichen Unterschied, denn auf den Container zugreifen musst Du ja in beiden Fällen, oder wie meinst Du das?

Naja, um eine Komponente zu greifen, muss ich sie ja direkt anfassen ("beklicken"), und im falle einer Table (mit ScrollPane), möchte man ja eigentlich die Table verschieben. Da die Table ja aber eine Subkomponente ist, ist sie ja weiterhin aktiv, und reagiert auf sämtliche Mausklicks (Zellenselektion) und daher interessierts das ScrollPane ja wenig das der Nutzer eigentlich das ganze "Paket" verschieben will.

PS: das Flackern könnte damit zusammenhängen, dass die "mouseDragged" Ereignisse in Bezug auf die Komponente erzeugt werden und die Komponente sich gleichzeitig mit der Maus bewegt.

Nun ja, das witzige ist ja, das wenn ich alles, statt mit einem LayeredPane und einem zweitpanel, mit dem FrameGlassPane mache, alles wunderbar flüssig läuft. Selbe listener und alles, ich füge die Temporär zu verschiebene Komponente nur aufs Glasspane und setzte bei MouseDragged die Location neu, so auch jetzt. Und nu flackerts!


Aber trotzdem danke!
 

André Uhres

Top Contributor
Dass man die "Scrollpane" nicht immer greifen kann, war mir schon klar (obschon es in der Ecke unten rechts immer dann gehen würde, wenn beide "Scrollbars" sichtbar sind). Um ein Bild zu erzeugen, musst Du aber ebenfalls zuerst wissen, was der Benutzer verschieben will: das Problem bleibt also dasselbe.

Der Unterschied bei deinen beiden Implementationen wo eine flackert und die andere nicht, könnte vielleicht darin bestehen, dass die MouseListener unterschiedlich eingesetzt werden.
 

Sunchezz

Bekanntes Mitglied
Dass man die "Scrollpane" nicht immer greifen kann, war mir schon klar (obschon es in der Ecke unten rechts immer dann gehen würde, wenn beide "Scrollbars" sichtbar sind). Um ein Bild zu erzeugen, musst Du aber ebenfalls zuerst wissen, was der Benutzer verschieben will: das Problem bleibt also dasselbe.

Nun ja, in der ersten Version geh ich erstmal davon aus das Verschiebungen nur von "top-Level-elementen" in dem eigentlichen VerschiebePanel nutzbar sind. Also wäre es in jedem Fall immer die Table + ScrollPane die man verschieben will. Der standard user weiß ja nich das das eigentlich 2 Komponenten sind^^

Und was die Bilderzeugung angeht, die führ ich schon aus wenn in dem Panel der "Config button" gedrückt wird. Da werden sofort alle ScrollPanes und JPanels usw. zu Bildern gemacht!

Kleiner Hinweis zu ScrollPane, an der Border ist sie immer zu packen ;)

Der Unterschied bei deinen beiden Implementationen wo eine flackert und die andere nicht, könnte vielleicht darin bestehen, dass die MouseListener unterschiedlich eingesetzt werden.

Nein, das kann meiner Meinung einfach nicht sein.
Der einzige Unterschied ist wie gesagt, das ich innerhalb des Listeners anstatt
Java:
glasspane.add(selectedComponent);
Java:
secondPanel.add(selectedComponent);
... nutze.

Kann es irgendwas mit dem LayeredPane zu tun haben, oder mit der Art wie ich von der Component ein Bild mache?

Mit den anderen normalen Komponenten existiert dieses Problem ja nicht. nur wenn ein selbstgemachtes Bild ins Spiel kommt.
Also wenn nen normaler Button über das Bild gezogen wird, oder andersrum.


mit der Klasse erstelle ich die Bilder von den Komponenten:
Java:
package jls.tests.gui;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JComponent;

public class ComponentCopyPicture extends JComponent {

	private static final long serialVersionUID = 1992007953073696720L;
	private Image img;
	
	public ComponentCopyPicture(Component c) {
		this.img = getComponentPicture(c);
		oldComponentPosition = c.getParent().getComponentZOrder(c);
	}
	
	public ComponentCopyPicture(Image img) {
		this.img = img;
		int w = img.getWidth(this);
		int h = img.getHeight(this);
		setPreferredSize(new Dimension(w, h));
	}	

	protected void paintComponent(Graphics g) {
		g.drawImage(img, 0, 0, this);
	}
	
	protected Image getComponentPicture(Component c) {
		BufferedImage img = new BufferedImage(c.getWidth(),
				c.getHeight(), BufferedImage.TYPE_INT_RGB);
		img.flush();
		c.paint(img.getGraphics());
		return img;
	}
}
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Nun ja, in der ersten Version geh ich erstmal davon aus das Verschiebungen nur von "top-Level-elementen" in dem eigentlichen VerschiebePanel nutzbar sind. Also wäre es in jedem Fall immer die Table + ScrollPane die man verschieben will. Der standard user weiß ja nich das das eigentlich 2 Komponenten sind^^

In der "Bild"-Version gehst Du ja sicher von derselben Annahme aus. Wie gesagt, für mich macht das keinen wesentlichen Unterschied, denn auf den Container zugreifen musst Du ja in beiden Versionen.

Dein Problem ist wohl gar nicht, dass der Container nicht greifbar ist, wie Du behauptest, sondern etwas, was man sich nicht so richtig vorstellen kann.

Versuch mal ein KSKB zu machen. KSKB bedeutet: Kurzes, Selbständiges, Kompilierbares Beispiel. Ein KSKB vorzubereiten kostet Anstrengung. Der Lohn: schnellere Lösung des Problems. Oft führt es dazu, dass man die Lösung selbst findet, ohne etwas zu posten, weil man dann nämlich gezwungen ist, das Problem auf das Wesentliche zu reduzieren und somit die Lösung leichter zu finden ist.
 

Sunchezz

Bekanntes Mitglied
Dein Problem ist wohl gar nicht, dass der Container nicht greifbar ist, wie Du behauptest, sondern etwas, was man sich nicht so richtig vorstellen kann.
Das versteh ich nun garnicht.
Wie gesagt, mit einem Bild find ichs eigentlich am besten.



Vielen dank, was ein kskb ist weiß ich.
Das Problem ist, das mein momentanes Projekt ein reines KSBK ist...
Ich könnte dir höchstens die Jar schicken mit source, da es doch um die 6 umfangreichen Klassen sind.

Ich werde aber veruchen es alles noch mehr zu kürzen! -.-
 

André Uhres

Top Contributor
Du sagtest, Dein Problem sei, dass der Container nicht greifbar ist. Wie Du das mit einem Bild lösen kannst, das versteh ich allerdings gar nicht.

Indem Du dich dann bemüht hast, Dein "KSKB" auf das Wesentliche zu reduzieren, hast Du den Fehler selbst gefunden (Glückwunsch, kommt allerdings öfter vor) und zudem hat der Fehler anscheinend auch gar nichts mit dem Bild zu tun!
 

Sunchezz

Bekanntes Mitglied
Der Container ist nach wie vor für mich in dem Sinne nicht greifbar, das eine Komponente darin(!) ist. Der Nutzer sieht nur eine Tabelle und möchte sie gerne an einen anderen Platz verschieben, weiß aber nicht, das er eigentlich das ScrollPane verschieben muss. Also klickt er munter auf der Tabelle rum, und anstatt das sie zur Bewegung "freigegeben" ist (das ist ja nur das ScrollPane), wird einfach nur in der Tabelle eine Zelle selektiert wie gewöhnlich. Indem ich aus der ScrollPane samt inhalt nen Bild mache, und dieses wie eine JComponent behandle, erreiche ich das es für den nutzer so aussieht als verschiebt er "einfach nur" die Tabelle!


Muss dich leider enttäuschen, es lag nicht am Kskb ;)
Und ja, es lag nicht am Bild, sondern am validate(), obwohl ich das immernoch nur teilweise verstehe...
Trotzdem danke für die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Überlappung im GridPane AWT, Swing, JavaFX & SWT 2
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
G Überlappung von Komponenten AWT, Swing, JavaFX & SWT 6
G NullLayout: "Überlappung von Komponenten" AWT, Swing, JavaFX & SWT 15
Soloeco Graphics2D - Verbinden zweier Punkte AWT, Swing, JavaFX & SWT 6
F Kollision zweier Images AWT, Swing, JavaFX & SWT 3
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
W Vergleich zweier Strings und schreiben in Textarea AWT, Swing, JavaFX & SWT 12
T Kontrast zweier Farben vergleichen AWT, Swing, JavaFX & SWT 5
J Vergleicher zweier Bilder AWT, Swing, JavaFX & SWT 2
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
R Swing Komponenten klein angezeigt AWT, Swing, JavaFX & SWT 10
D Swing Swing Komponenten verschieben AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben