drag und drop und move mit 2 Fenstern fkt. nicht 100 %ig

Status
Nicht offen für weitere Antworten.

PELLE

Bekanntes Mitglied
Hallöle,

beide .java files: http://www.sendspace.com/file/um5ry7

ich arbeite grad an einem winamp "clone"...

das sind 2 klassen einmal das hauptfenster sprich der Mp3player und das Nebenfenster bzw. SecondFrame bzw. die Playlist die im winamp normalerweise unterhalb des Mp3players ist. Wenn ich das Hauptfenster mit dem angedockten nebenfenster gaaaaaaaanz langsam verschiebe bzw. draggge dann zieht das nebenfenster mit dem hauptfenster mit bzw. es bleibt am Hauptfenster angedockt, wenn ich aber schneller ziehe, dann zieht das nebenfenster nicht mit dem hauptfenster mit bzw. es ist nicht mehr angedockt.

Das Nebenfenster bekommt sobald das Hauptfenster gezogen bzw. moved wird die x-koordinaten des Hauptfensters als eigene x-koordinaten und die y-koordinaten + die höhe des Hauptfensters als y-koordinaten zugewiesen soviel zur erklärung...


Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MainFrame extends JFrame implements ComponentListener
{
    static JFrame dialog;
    public MainFrame()
    {
        super("HauptFenster");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(200,100);
        setLocationRelativeTo(null);
        setVisible(true);
        dialog = new JFrame("NebenFenster");
        dialog.setSize(200,100);
        dialog.setLocation(500,500);
        dialog.setVisible(true);
    }
    
    public void componentMoved(ComponentEvent e)
    {
        SecondFrame.NebenFenster.setLocation(SecondFrame.HauptFenster.getX(),SecondFrame.HauptFenster.getY()+SecondFrame.HauptFenster.getHeight());
    }
    public void componentHidden(ComponentEvent e) {}

    public void componentResized(ComponentEvent e) {}

    public void componentShown(ComponentEvent e) {}
    
    public static void main(String args[])
    {
        new SecondFrame(new MainFrame(), dialog);
    }
}

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SecondFrame extends ComponentAdapter
{
    static Window HauptFenster, NebenFenster;

    public SecondFrame(Window HauptFenster, Window NebenFenster)
    {
        this.HauptFenster = HauptFenster;
        this.NebenFenster = NebenFenster;
        HauptFenster.addComponentListener(this);
        NebenFenster.addComponentListener(this);
    }

    public void componentMoved(ComponentEvent e)
    {
        int abstandNullX, abstandNullY;

        abstandNullX = HauptFenster.getX()+HauptFenster.getWidth();
        abstandNullY = HauptFenster.getY()+HauptFenster.getHeight();

        if((NebenFenster.getX() - abstandNullX < 10) && (NebenFenster.getY() - abstandNullY < 10))
        {
            NebenFenster.setLocation(HauptFenster.getX(),HauptFenster.getY()+HauptFenster.getHeight());
        }
        else
        {
          ;
        }
    }    

}
 

PELLE

Bekanntes Mitglied
keiner weiß Bescheid kommt kiners... :-( wir haben hier doch einige checker wie foobar, hobbit, illu,the29, roar :p usw. wo seid ihr :)
 

Wildcard

Top Contributor
Da sich sonst niemand erbarmt sag ich's dir eben :cool:
Bei schnellen Bewegungen wird dein Listener erst dann informiert wenn die neuen Koordinaten bereits weiter vom anderen Frame entfernt sind als die von dir gewählten Minimalabstände.
Deinen Code finde ich ohnehin sehr gewagt, wenn ich es noch schaffe poste ich dir ein Snippet...
 

Wildcard

Top Contributor
Ich hab mich dabei am Verhalten von WinAMP orientiert. Ist natürlich noch nicht ganz fertig, aber du sollst ja auch noch was machen :wink:
Code:
public class MainFrame extends JFrame
{
    private DockableFrame dialog;
    public MainFrame()
    {
        super("HauptFenster");
        dialog = new DockableFrame(this);
        dialog.setSize(200,100);
        dialog.setLocation(500,500);
        dialog.setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(200,100);
        setLocationRelativeTo(null);
        setVisible(true);

    }
   


	public static void main(String args[])
    {
    	new MainFrame();
    }
}

class DockableFrame extends JFrame
{
	private JFrame frame;
	private boolean top,bottom,left,right;
	private Point offset;
	private ComponentListener listener;

	public DockableFrame(JFrame mainFrame) throws HeadlessException
	{
		super();
		frame = mainFrame;
		listener=new CustomComponentListener();
		addFocusListener(new FocusListener() {
		
			public void focusLost(FocusEvent e)
			{
				removeComponentListener(listener);
		
			}
		
			public void focusGained(FocusEvent e)
			{
				addComponentListener(listener);
		
			}
		
		});
		

		mainFrame.addComponentListener(new ComponentAdapter() {
		
			@Override
			public void componentMoved(ComponentEvent e)
			{
				if(top||bottom||right||left)
					setLocation(frame.getX()-offset.x,frame.getY()-offset.y);
			}
		
		});
	}

	protected void updateLocation()
	{
		if(top)
			setLocation(getX(), frame.getY()-getHeight());
		else if(bottom)
			setLocation(getX(), frame.getY()+frame.getHeight());
		if(right)
			setLocation(frame.getX()+frame.getWidth(), getY());
		else if(left)
			setLocation(frame.getX()-getWidth(), getY());
		
	}

	protected void updateDockings()
	{
		Rectangle r1 = getBounds();
		r1.grow(5, 5);
		Rectangle r2 = frame.getBounds();
		if(!r1.intersects(r2))
			return;
		//left docking
    	if(Math.abs(getX()+getWidth()-frame.getX())<10)
    		left=true;
    	//right docking
    	if(Math.abs(getX()-(frame.getX()+frame.getWidth()))<10)
    		right=true;
    	//top docking
    	if(Math.abs(getY()+getHeight()-frame.getY())<10)
    		top=true;
    	//bottom docking
    	if(Math.abs(getY()-(frame.getY()+frame.getHeight()))<10)
    		bottom=true;
		
	}
	
	class CustomComponentListener extends ComponentAdapter
	{
		@Override
		public void componentMoved(ComponentEvent e)
		{
			left=right=top=bottom=false;
			updateDockings();
			updateLocation();
			offset=new Point(frame.getX()-getX(),frame.getY()-getY());
		}
	}
}
 

PELLE

Bekanntes Mitglied
hab code mal ausgeführt aber da wird überhaupt nix angedockt, das sind ja lediglich nur 2 jframes???
 

Wildcard

Top Contributor
Du musst das Nebenfenster an die Nähe des Rands des Hauptfensters ziehen, dann dockt dieses an.
Wenn du dann das Hauptfenster bewegst geht das Nebenfenster mit.
 

PELLE

Bekanntes Mitglied
ok du hast recht es snappt wenn ich ca. 3 pixel davor bin;-) daher habe ich das nicht gesehen, super vielen dank ich werde mir den Code anschauen usw. !!!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Grid und drag and drop Allgemeine Java-Themen 1
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
G Drag and Drop und trotzdem MouseEvents Allgemeine Java-Themen 3
G Datei per Drag and Drop auf den Link öffnen Allgemeine Java-Themen 6
S GUI - Drag & Drop Elemente Allgemeine Java-Themen 10
S Falsches Encoding bei Drag and Drop von Umlauten Allgemeine Java-Themen 16
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
C Drag & Drop, Icons sollen getauscht werden Allgemeine Java-Themen 4
vladimir Welche API für Grafik und Drag&Drop Allgemeine Java-Themen 3
M Zwischenablage/ Drag and Drop Allgemeine Java-Themen 9
G Drag & Drop Allgemeine Java-Themen 6
M Drag and Drop FileListFlavor unter Ubuntu - Nautilus Allgemeine Java-Themen 5
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
G Drag&Drop von Textdateien Allgemeine Java-Themen 13
G Datei Verknuepfung, drag&drop Plattformunabhaengig Allgemeine Java-Themen 3
T Drag und Drop von Applet 1 zu Applet 2 _in_ derselben VM Allgemeine Java-Themen 9
T JLable Drag und Drop Allgemeine Java-Themen 4
R Drag und Drop - Fehler während Laufzeit Allgemeine Java-Themen 14
R Drag und Drop von externen Files geht nur als Application Allgemeine Java-Themen 2
F Drag&Drop Allgemeine Java-Themen 10
M In JTables Drag und Drop verbieten Allgemeine Java-Themen 2
L Drag and Drop Table Allgemeine Java-Themen 9
U Drag & Drop Allgemeine Java-Themen 2
E Frage zu Drag and Drop Allgemeine Java-Themen 2
S Drag&Drop einer Datei, wie nur den Dateipfad erhalten? Allgemeine Java-Themen 9
G Drop down Button Menü (Combobox) Allgemeine Java-Themen 7
L Drop Emails von Outlook in eine JList Allgemeine Java-Themen 5
T Java Excel Drop Down Formularsteuerelement Allgemeine Java-Themen 0
R Drang and Drop: Tab bei Firefox Allgemeine Java-Themen 13
C Input/Output Problem bei Datei verschiebung mit File.move und Paths.get() Allgemeine Java-Themen 26
P Can not move rar archives because of the notfinished packing Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben