Suche "Einblendeffekt"

Status
Nicht offen für weitere Antworten.

voidee

Mitglied
Hi,

ich suche was bestimmtes:

ich habe ein Fenster mit einem GridBagLayout. In der obersten Zeile ist ein JPanel eingefügt. Dieses JPanel möchte ich nach ca. 5 Sekunden durch ein anderes JPanel ersetzen. Mit remove und add klappt das auch. Ich hätte es aber gerne anders:
am liebsten wäre es mir, wenn sich das neue Panel von rechts nach links "reinschiebt" und das andere dabei raus. Oder eine "Überblendung" wäre auch nett.

Lässt sich sowas realisieren? Hat da irgendjemand eine Idee ?

Hoffe auf Tipps / Ideen,
Gruß
Tom
 

Marco13

Top Contributor
Jo, klar geht das... Überblendung wäre ggf. etwas aufwändiger, aber so ein Rein/Rausschieben ist mit einem Thread schnell erledigt - spontan aus dem Kopf hingeschrieben
Code:
final JPanel container = dasWasImLayoutRumliegt();
final JPanel p0 = dasWasWegSoll();
// Am Anfang gilt: 
p0.setBounds(0,0,container.getWidth(),container.getHeight());
final JPanel p1 = dasWasHinSoll();
Thread t = new Thread(new Runnable()
{
    public void run()
    {
        for (int x=0; x<container.getWidth(); x+=5)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    p0.setBounds(x,0,container.getWidth(),container.getHeight());
                    p1.setBounds(-container.getWidth()+x,0,container.getWidth(),container.getHeight());
                    // Vielleicht noch 'n container.validate() und/oder container.repaint() hier hin....
                }
            });
            try { Thread.sleep(20) } catch (InterruptedException e) { e.printStackTrace(); }
        }
    }
});
t.start();
UNGETESTET! Müßte aber grob passen...

EDIT: Hoppala - die Reinschiebrichtung ist jetzt von links nach rechts - aber das kannst du ja leicht anpassen...
 

voidee

Mitglied
Ah schön :D

Probier ich mal aus. Z.Z hab ich ein JSplitPane "vergewaltigt", aber das zickt noch ein bisschen rum, weil ich es nicht verschieben kann (anscheinend wollen die darin enthaltenen Komponenten unbedingt angezeigt werden).
 

Marco13

Top Contributor
Ach, ich weiß auch nicht warum...
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


class SlideContainer extends JPanel
{
    private JComponent components[];
    private int currentIndex = 0;
    private int targetIndex = 0;
    private int currentLocalOffset = 0;

    public SlideContainer(final JComponent ... components)
    {
        this.components = components;
        setLayout(null);
        for (JComponent c : components)
        {
            add(c);
        }
        adjustSizes();
        addComponentListener(new ComponentAdapter()
        {
            public void componentResized(ComponentEvent event)
            {
                adjustSizes();
            }
        });
        createAnimator();
    }

    private void adjustSizes()
    {
        int offset = -currentIndex * getWidth();
        for (int i=0; i<components.length; i++)
        {
            components[i].setBounds(currentLocalOffset+i*getWidth()+offset,0,getWidth(),getHeight());
        }
    }



    public synchronized void setCurrentIndex(int index)
    {
        if (index >= 0 && index < components.length)
        {
            targetIndex = index;
            notifyAll();
        }
    }

    public int getCurrentIndex()
    {
        return currentIndex;
    }

    private void createAnimator()
    {
        Thread t = new Thread(new Runnable()
        {
            public void run()
            {
                while (true)
                {
                    if (currentIndex == targetIndex)
                    {
                        synchronized (SlideContainer.this)
                        {
                            try
                            {
                                SlideContainer.this.wait();
                            }
                            catch (InterruptedException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                    else
                    {
                        if (currentIndex < targetIndex)
                        {
                            for (int x=0; x>=-getWidth();x-=20)
                            {
                                currentLocalOffset = x;
                                applyLocalOffset();
                            }
                            currentIndex++;
                            currentLocalOffset = 0;
                            applyLocalOffset();
                        }
                        if (currentIndex > targetIndex)
                        {
                            for (int x=0; x<=getWidth();x+=20)
                            {
                                currentLocalOffset = x;
                                applyLocalOffset();
                            }
                            currentIndex--;
                            currentLocalOffset = 0;
                            applyLocalOffset();
                        }
                    }
                }
            }
        });
        t.start();
    }

    private void applyLocalOffset()
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                adjustSizes();
                validate();
                repaint();
            }
        });
        try
        {
            Thread.sleep(10);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

    }





}



class SlideContainerTest extends JFrame
{
    public static void main(String args[])
    {
        new SlideContainerTest().setVisible(true);
    }

    public SlideContainerTest()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300,200);

        getContentPane().setLayout(new BorderLayout());

        JPanel p0 = new JPanel();
        p0.setBackground(Color.RED);
        p0.add(new JLabel("Panel 0"));

        JPanel p1 = new JPanel();
        p1.setBackground(Color.GREEN);
        p1.add(new JLabel("Panel 1"));

        JPanel p2 = new JPanel();
        p2.setBackground(Color.BLUE);
        p2.add(new JLabel("Panel 2"));

        final SlideContainer slideContainer = new SlideContainer(p0, p1, p2);

        JPanel buttonPanel = new JPanel(new GridLayout(1,0));
        JButton b = new JButton("<-");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                slideContainer.setCurrentIndex(slideContainer.getCurrentIndex()-1);
            }
        });
        buttonPanel.add(b);

        b = new JButton("->");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                slideContainer.setCurrentIndex(slideContainer.getCurrentIndex()+1);
            }
        });
        buttonPanel.add(b);

        getContentPane().add(buttonPanel, BorderLayout.NORTH);
        getContentPane().add(slideContainer, BorderLayout.CENTER);

    }


}
 

Ebenius

Top Contributor
Anmerkung zu Threads: Hier ist der javax.swing.Timer eine sinnvolle Alternative! Die actionPerformed()-Methode des ActionListeners wird dann gleich im Event Dispatcher Thread aufgerufen, was die nervigen SwingUtilities.invoke....-Aufrufe aus dem Code verbannt. Und der Aufwand zur Laufzeit ist geringer.
 

Meru

Bekanntes Mitglied
Hach, ein sehr schöner Effekt und relativ einfach. Ich hab mich an sowas auch mal versucht, doch es war nur noch Spaghetti-Code. Vielen dank für dein Posting :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
looparda Suche Lib für Visualisierung von Graphen AWT, Swing, JavaFX & SWT 12
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
Maks16 JavaFX ominöse Mails in meinem Suche Postfach von Outlook Sharepoint AWT, Swing, JavaFX & SWT 4
S JavaFX Suche Literatur für JavaFX Einstieg AWT, Swing, JavaFX & SWT 8
P LookAndFeel Suche Buch und Beispielprojekte für gute Designs AWT, Swing, JavaFX & SWT 4
L [SUCHE] Tutorial zur grafischen Nutzeroberflächengestaltung AWT, Swing, JavaFX & SWT 6
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
I Suche in einem Text AWT, Swing, JavaFX & SWT 4
TheWhiteShadow Swing suche passenden LayoutManager AWT, Swing, JavaFX & SWT 8
hdi LookAndFeel Suche: Substance L&F AWT, Swing, JavaFX & SWT 4
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
G DB-Suche in GUI AWT, Swing, JavaFX & SWT 4
C Live Suche mit TextFeld AWT, Swing, JavaFX & SWT 2
A Swing suche OpenSource Date(Time)Picker Komponente AWT, Swing, JavaFX & SWT 9
A LookAndFeel Suche richtige Technologie für eine bestimme Desginvorlage AWT, Swing, JavaFX & SWT 5
N LayoutManager suche LayoutManager für Tabellenstruktur AWT, Swing, JavaFX & SWT 2
A Suche: Eclipse-GUI-Layout AWT, Swing, JavaFX & SWT 5
Nicer LookAndFeel Suche noch LaFs AWT, Swing, JavaFX & SWT 7
padde479 Suche eine Komponente (->ToolBar) AWT, Swing, JavaFX & SWT 7
E Swing JTree Filter Suche mit Collapse?! AWT, Swing, JavaFX & SWT 4
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
slawaweis Suche TagCloud Komponente für Swing AWT, Swing, JavaFX & SWT 10
hdi SWT Suche passenden LayoutManager AWT, Swing, JavaFX & SWT 5
Nicer LookAndFeel Suche LaFs AWT, Swing, JavaFX & SWT 12
N Suche nach Komponente / LaF AWT, Swing, JavaFX & SWT 21
V [SUCHE]GUI Programmier Tutorial[Netbeans] AWT, Swing, JavaFX & SWT 8
M Suche passende Chart Library LGPL/kommerziell AWT, Swing, JavaFX & SWT 14
E Swing Suche LayoutManager AWT, Swing, JavaFX & SWT 5
hdi Swing Suche nach passendem Layout AWT, Swing, JavaFX & SWT 8
P Suche freien Date und Time Picker AWT, Swing, JavaFX & SWT 3
hdi Swing Suche passende API Klasse(n) für meine Komponente AWT, Swing, JavaFX & SWT 8
ModellbahnerTT Suche bessere Methode AWT, Swing, JavaFX & SWT 4
M Suche Java Komponente AWT, Swing, JavaFX & SWT 2
newcron Suche die hässlichsten Swing GUIs AWT, Swing, JavaFX & SWT 4
A Suche TreeTable-Komponente AWT, Swing, JavaFX & SWT 12
C Suche fertigen HTML editor AWT, Swing, JavaFX & SWT 2
V Suche Komponente AWT, Swing, JavaFX & SWT 2
hdi JTable -> Suche passenden Listener AWT, Swing, JavaFX & SWT 10
D Suche Framework um Grafikprogramm zu schreiben. AWT, Swing, JavaFX & SWT 36
Q Suche "Ablaufplan" für Swing-Fensterwechsel? AWT, Swing, JavaFX & SWT 2
R Ich suche einen sehr simplen. AWT, Swing, JavaFX & SWT 2
A Suche analoge Uhr in Java AWT, Swing, JavaFX & SWT 9
M Jlist Eintrag mit suche selektieren AWT, Swing, JavaFX & SWT 4
W Suche großes vollständiges Swing GUI Beispiel nach MVC Model AWT, Swing, JavaFX & SWT 5
G Suche 2 Componenten: Splitpane ausblenden / Stecknadel AWT, Swing, JavaFX & SWT 2
B Suche eine GUI-Komponente AWT, Swing, JavaFX & SWT 2
G Listener Suche für F1 AWT, Swing, JavaFX & SWT 25
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
E Suche kostenloses Iconset für Swing (Ocean) AWT, Swing, JavaFX & SWT 4
M Suche Komponente für mehrere 100.000 Zeile Text AWT, Swing, JavaFX & SWT 3
C suche 1.3er - compatible Version von Swing-layout AWT, Swing, JavaFX & SWT 15
S Ich suche ein Darstellungselement AWT, Swing, JavaFX & SWT 2
T Suche Methode zum anzeigen eines Textteils im JPasswordfield AWT, Swing, JavaFX & SWT 2
N [Suche] JTree Widget/Library. AWT, Swing, JavaFX & SWT 2
M auf der suche nach einer komponente AWT, Swing, JavaFX & SWT 3
G suche Actionlistener der "Loslassen" eines Buttons AWT, Swing, JavaFX & SWT 5
G Suche Tutorial zum Thema jdbc/SQL/Select/JTable AWT, Swing, JavaFX & SWT 9
O Suche einfache Möglichkeit zum Speichern AWT, Swing, JavaFX & SWT 21
H Suche Quelltext für einen einfachen Animationsthread AWT, Swing, JavaFX & SWT 8
EagleEye suche Tutorial(s) für JTable AWT, Swing, JavaFX & SWT 2
G Suche einen KeyEvent für die Taste "ä" AWT, Swing, JavaFX & SWT 7
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben