5

クラスでは、最初の GUI アプリケーションに取り組んでいます。これは、前へ、次へ、停止、再生の 4 つのボタンを備えたシンプルな画像ビューアです。Previous と Next は問題なく動作しますが、正直なところ、スライドショー部分 (Play & Stop) の作業を開始する方法さえわかりません。画像の変化に応じて速度を制御するのにおそらく便利なタイマークラスがあることは知っていますが、画像を循環させるために通常どのような種類のロジックが使用されるかはわかりません。誰かが私を正しい方向に向けることができますか、私の脳はこの時点で少し揚げられています:0

以下に私のコードを含めました。私はこれに慣れていないので、人々が私のテクニックをあまり批判しないことを願っています. それが問題なら、私は日食で働いています。

これまでの私のコードは次のとおりです。

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();
                }

        }
    }
}
4

4 に答える 4

5

なぜ単純なことを複雑にするのか、

于 2012-04-23T05:44:10.127 に答える
3

このは、 を制御する開始/停止ボタンを示していますjavax.swing.Timer。毎回ラベルを置き換える代わりに、@mKorbel によって提案され、ここに示されているように、ラベルのを更新するだけです。Icon

于 2012-04-23T07:36:30.873 に答える
1

スライドショーにはスレッドを使用する必要があります。runメソッドでフラグを使用して、showを続行するか、このフラグが変更された場合に停止することができます(例:ブール変数)。http://java.sun.com/developer/technicalArticles/Threads/applet/で見ることができる1つの例。

于 2012-04-23T05:11:35.047 に答える
0

これらはあなたが始めるかもしれないいくつかのガイドラインです:

まず、変化する画像を制御するための別のスレッドが必要になります。TimerTaskを実装するクラスを作成することをお勧めします。このクラスのrun()メソッドをオーバーライドします。このrunメソッドでは、表示されている現在の画像を変更する機能を配置する必要があります(次および前の関数で行ったのと同様)。

再生ボタンのactionPerformed()メソッドで、Timerクラスのインスタンスを作成し、scheduleAtFixedRate(TimerTask task、long delay、long period)メソッドを使用してタイマーを開始する必要があります(このクラスの他のメソッドも使用できます、scheduleAtFixedRate()の方が適切なようです)。

停止するには、Timerクラスのcancel()メソッドを使用して、実行中のタイマーを停止するのに十分な機能を追加する必要があります。

于 2012-04-23T05:13:56.280 に答える