5 Stimmen

Wie man eine Bildergalerie mit Java erstellt

Für den Unterricht arbeite ich an meiner ersten GUI-Anwendung. Es ist nur ein einfacher Bildbetrachter mit vier Schaltflächen: Zurück, Weiter, Stopp, Abspielen. Zurück und Weiter funktionieren gut, aber ehrlich gesagt weiß ich nicht einmal, wie ich mit dem Diashow-Teil (Play & Stop) anfangen soll. Ich weiß, es gibt eine Timer-Klasse, die wahrscheinlich für die Steuerung der Geschwindigkeit praktisch wäre, wie die Bilder ändern ... aber ich bin nicht sicher, welche Art von Logik typischerweise verwendet wird, um durch die Bilder Zyklus. Kann jemand zeigen mir in die richtige Richtung, mein Gehirn ist ein wenig gebraten an dieser Stelle :0

Ich habe meinen Code unten eingefügt. Ich bin neu in diesem Bereich, daher hoffe ich, dass die Leute meine Technik nicht zu sehr kritisieren werden. Wenn es darauf ankommt, ich bin in Eclipse arbeiten.

Hier ist mein bisheriger Code:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.TimerTask;

public class ImageGallery extends JFrame
{
    private ImageIcon myImage1 = new ImageIcon ("Chrysanthemum.jpg");
    private ImageIcon myImage2 = new ImageIcon ("Desert.jpg");
    private ImageIcon myImage3 = new ImageIcon ("Jellyfish.jpg");
    private ImageIcon myImage4 = new ImageIcon ("Penguins.jpg");
    JPanel ImageGallery = new JPanel();
    private ImageIcon[] myImages = new ImageIcon[4];
    private int curImageIndex=0;

    public ImageGallery ()
        {   
            ImageGallery.add(new JLabel (myImage1));
            myImages[0]=myImage1;
            myImages[1]=myImage2;
            myImages[2]=myImage3;
            myImages[3]=myImage4;

            add(ImageGallery, BorderLayout.NORTH);

            JButton PREVIOUS = new JButton ("Previous");
            JButton PLAY = new JButton ("Play");
            JButton STOP = new JButton ("Stop");
            JButton NEXT = new JButton ("Next");

            JPanel Menu = new JPanel();
            Menu.setLayout(new GridLayout(1,4));
            Menu.add(PREVIOUS);
            Menu.add(PLAY);
            Menu.add(STOP);
            Menu.add(NEXT);

            add(Menu, BorderLayout.SOUTH);

            //register listener
            PreviousButtonListener PreviousButton = new PreviousButtonListener ();
            PlayButtonListener PlayButton = new PlayButtonListener ();
            StopButtonListener StopButton = new StopButtonListener ();
            NextButtonListener NextButton = new NextButtonListener ();

            //add listeners to corresponding componenets 
            PREVIOUS.addActionListener(PreviousButton);
            PLAY.addActionListener(PlayButton);
            STOP.addActionListener(StopButton);
            NEXT.addActionListener(NextButton);

        }

    public static void main (String [] args)
        {
            ImageGallery frame = new ImageGallery();

            frame.setSize(490,430);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
        }

    class PreviousButtonListener implements ActionListener 
    {

        public void actionPerformed(ActionEvent e)
            {
                if(curImageIndex>0 && curImageIndex <= 3)
                    {   ImageGallery.remove(0);
                        curImageIndex=curImageIndex-1;
                        ImageIcon TheImage= myImages[curImageIndex];
                        ImageGallery.add(new JLabel (TheImage));
                        ImageGallery.validate();
                        ImageGallery.repaint(); 
                    }
                else 
                    {   
                        ImageGallery.remove(0);
                        ImageGallery.add(new JLabel (myImage1));
                        curImageIndex=0;
                        ImageGallery.validate();
                        ImageGallery.repaint();
                    }
            }
    }

    class PlayButtonListener implements ActionListener 
    {
        public void actionPerformed(ActionEvent e)
            {
                        // *need help here*//

            }
    }

    class StopButtonListener implements ActionListener 
    {
        public void actionPerformed(ActionEvent e)
            {
                        // *need help here*//
            }
    }

    class NextButtonListener implements ActionListener 
    {

        public void actionPerformed(ActionEvent e)
        {

            if(curImageIndex>=0 && curImageIndex < 3)
                {   ImageGallery.remove(0);
                    curImageIndex = curImageIndex + 1;
                    ImageIcon TheImage= myImages[curImageIndex];
                    ImageGallery.add(new JLabel (TheImage));
                    ImageGallery.validate();
                    ImageGallery.repaint(); 
                }
            else 
                {   
                    ImageGallery.remove(0);
                    ImageGallery.add(new JLabel (myImage4));
                    curImageIndex=3;
                    ImageGallery.validate();
                    ImageGallery.repaint();
                }

        }
    }
}

5voto

mKorbel Punkte 109073

Warum einfache Dinge kompliziert machen,

3voto

trashgod Punkte 199887

Diese exemple zeigt eine Start/Stopp-Taste, die eine javax.swing.Timer . Anstelle von Ersetzen von das Etikett jedes Mal, nur Update des Labels Icon wie von @mKorbel vorgeschlagen und gezeigt aquí .

1voto

Paul Vargas Punkte 40201

Für die Diashow müssen Sie einen Thread verwenden. Sie können ein Flag in der Run-Methode verwenden, um die Show fortzusetzen oder zu stoppen, wenn sich dieses Flag ändert, z.B. eine boolesche Variable. Ein Beispiel sehen Sie in http://java.sun.com/developer/technicalArticles/Threads/applet/ .

0voto

Brendan Cutajar Punkte 697

Dies sind einige Leitlinien, die Ihnen den Einstieg erleichtern könnten:

Zunächst benötigen Sie einen separaten Thread, um die wechselnden Bilder zu kontrollieren. Ich schlage vor, Sie schreiben eine Klasse, die Folgendes implementiert TimerAufgabe . Überschreiben Sie die run()-Methode in dieser Klasse. In dieser run-Methode sollten Sie die Funktionalität zum Ändern des aktuell angezeigten Bildes unterbringen (ähnlich wie in der nächsten und vorherigen Funktion).

In der actionPerformed()-Methode für die Play-Schaltfläche müssen Sie eine Instanz der Timer-Klasse erstellen und Ihren Timer mit der Methode scheduleAtFixedRate(TimerTask task, long delay, long period) starten (andere Methoden in dieser Klasse können ebenfalls verwendet werden, scheduleAtFixedRate() scheint jedoch angemessener zu sein).

Für den Stopp müssen Sie dann eine ausreichende Funktionalität hinzufügen, um den laufenden Timer mit der Methode cancel() in der Timer-Klasse anzuhalten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X