Discussion:
JPanels innerhalb von JPanel verschieben
(zu alt für eine Antwort)
Mike Wesling
2005-07-16 10:02:54 UTC
Permalink
Hallo,

ich habe ein JPanel (pGross), in dem mehrere rechteckige JPanels
(pKlein) mit einer JTextArea drin angezeigt werden.

Jetzt möchte ich einzelne JPanels (pKlein) innerhalb des pGross-JPanels
durch den Benutzer mit der Maus verschieben lassen können
(DragAndDrop-Verhalten). Das Verschieben sollte dabei so aussehen, dass
das zu verschiebende JPanel während des Verschiebens immer über den
anderen pKlein-JPanels angezeigt wird.

Bei meiner jetzt verwendeten Methode ruckelt es beim Verschieben immer
gewaltig und manchmal wird das zu verschiebende JPanel gar nicht
angezeigt oder ist plötzlich transparent.


Wie erreiche ich denn für mein beschriebenes Programmverhalten ein
flüssiges Verschieben einzelner JPanels, ohne Ruckeln etc. und so, dass
das zu verschiebende Panel immer über allen anderen Panels angezeigt wird?
Mike Wesling
2005-07-16 10:51:53 UTC
Permalink
Hab mal hier ein Beispielprogramm zusammengeschustert, was mein Problem
etwas verdeutlichen soll. Ich hoffe, das tut es auch :-)

-------------------------------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main {
public static void main(String args[]) {
GUI g = new GUI();
}
}

class GUI extends JFrame {

JPanel pKlein1;
JPanel pKlein2;
JPanel pKlein3;

public GUI() {
super("Test");
setSize(700, 300);

JPanel pGross = new JPanel();
pGross.setLayout(null);
add(pGross);


pKlein1 = new JPanel();
pGross.add(pKlein1);
pKlein1.setBackground(Color.white);
pKlein1.setBounds(10, 20, 150, 150);
pKlein1.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
pKlein1.setLocation(e.getPoint());
}
});

pKlein2 = new JPanel();
pGross.add(pKlein2);
pKlein2.setBackground(Color.white);
pKlein2.setBounds(200, 20, 150, 150);
pKlein2.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
pKlein2.setLocation(e.getPoint());
}
});

pKlein3 = new JPanel();
pGross.add(pKlein3);
pKlein3.setBackground(Color.white);
pKlein3.setBounds(400, 20, 150, 150);
pKlein3.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
pKlein3.setLocation(e.getPoint());
}
});

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
-------------------------------------------------------------------------------------
Michael Paap
2005-07-16 11:37:22 UTC
Permalink
Post by Mike Wesling
Wie erreiche ich denn für mein beschriebenes Programmverhalten ein
flüssiges Verschieben einzelner JPanels, ohne Ruckeln etc. und so, dass
das zu verschiebende Panel immer über allen anderen Panels angezeigt wird?
Schau dir mal JLayeredPane und vielleicht auch JInternalFrame an:

http://java.sun.com/docs/books/tutorial/uiswing/components/layeredpane.html
http://java.sun.com/docs/books/tutorial/uiswing/components/internalframe.html

Gruß,
Michael
--
Die Adresse im From existiert, wird aber nicht gelesen. Sollte
eine Mail-Antwort auf ein Posting vonnöten sein, bitte folgende
Adresse verwenden: newsreply@<DOMAIN_AUS_DEM_FROM_DIESES_POSTINGS>.
Mike Wesling
2005-07-16 13:46:12 UTC
Permalink
Post by Michael Paap
Post by Mike Wesling
Wie erreiche ich denn für mein beschriebenes Programmverhalten ein
flüssiges Verschieben einzelner JPanels, ohne Ruckeln etc. und so, dass
das zu verschiebende Panel immer über allen anderen Panels angezeigt wird?
http://java.sun.com/docs/books/tutorial/uiswing/components/layeredpane.html
http://java.sun.com/docs/books/tutorial/uiswing/components/internalframe.html
Danke, das mit der JLayeredPane ist schon ganz gut!

Weißt Du auch was ich gegen dieses Ruckeln bzw. die komischen
Schatten-Effekte (bzw. oft dopplet angezeigten pKleins) machen kann, so
wie sie leider in meinem Beispiel auftreten??

Diese sind bei mir auch noch unter der Verwendung der JLayeredPane zu
sehen, was mach ich da nur falsch :-) !?!?

Loading...