Swing außerhalb des Hauptframe Komponente/Frame öffnen

N4pst3r

Mitglied
Mohoin

Ich denke es ist eigentlich recht simpel habe aber nichts dazu gefunden...

Ich möchte ein Fenster (o.ä.) seitlich neben dem Hauptfenster einhängen. Beim verschieben/vergrößern des Hauptfensters soll sich das eingehängte mitbewegen. Halt an dem Hauptfenster dranhängen 😉 .
Mehr gibts dazu glaub ich nicht zu sagen.
Hab noch ne skizze eingehängt.
 

Anhänge

  • Skizze eingehängtes Fenster.JPG
    Skizze eingehängtes Fenster.JPG
    11,3 KB · Aufrufe: 37
Versuch's mal so:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MoveTogetherDemo {

    public MoveTogetherDemo() {
        JFrame frame = new JFrame("MoveTogetherDemo  JFrame");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        JDialog dialog = new JDialog(frame, "JDialog");
        dialog.setSize(300, 200);
        dialog.setLocation(frame.getX() - dialog.getWidth(), frame.getY() + 50);
        dialog.setVisible(true);
        MovingTogether movingTogether = new MovingTogether(frame, dialog);
    }

    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            @Override
            public void run() {
                MoveTogetherDemo moveTogetherDemo = new MoveTogetherDemo();
            }
        };
        SwingUtilities.invokeLater(gui);
    }
}

class MovingTogether {

    private final ComponentAdapter componentAdapter;

    public MovingTogether(final JFrame frame, final JDialog dialog) {
        componentAdapter = new ComponentAdapter() {

            @Override
            public void componentMoved(final ComponentEvent e) {
                Window win = (Window) e.getComponent();
                if (win == frame) {
                    dialog.setLocation(frame.getX() - dialog.getWidth(), frame.getY() + 50);
                } else if (dialog.isVisible()) {
                    frame.setLocation(dialog.getX() + dialog.getWidth(), dialog.getY() - 50);
                }
            }

            @Override
            public void componentResized(final ComponentEvent e) {
                componentMoved(e);
            }
        };
        frame.addComponentListener(componentAdapter);
        dialog.addComponentListener(componentAdapter);
    }
}
 

Zurück
Oben