Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用java制作图像库_Java_Swing_Image Gallery - Fatal编程技术网

如何用java制作图像库

如何用java制作图像库,java,swing,image-gallery,Java,Swing,Image Gallery,在课堂上,我正在开发我的第一个GUI应用程序。它只是一个简单的图像查看器,有四个按钮:上一个、下一个、停止、播放。上一个和下一个工作都很好,但老实说,我甚至不知道如何开始幻灯片部分的工作(播放和停止)。我知道有一个计时器类,它可能很方便控制图像变化时的速度……但我不确定通常使用什么样的逻辑来循环图像。有人能给我指出正确的方向吗?我的大脑在这一点上有点兴奋:0 我在下面包含了我的代码。我是新手,希望大家不要对我的技术太挑剔。如果重要的话,我在eclipse中工作 以下是我目前的代码: import

在课堂上,我正在开发我的第一个GUI应用程序。它只是一个简单的图像查看器,有四个按钮:上一个、下一个、停止、播放。上一个和下一个工作都很好,但老实说,我甚至不知道如何开始幻灯片部分的工作(播放和停止)。我知道有一个计时器类,它可能很方便控制图像变化时的速度……但我不确定通常使用什么样的逻辑来循环图像。有人能给我指出正确的方向吗?我的大脑在这一点上有点兴奋:0

我在下面包含了我的代码。我是新手,希望大家不要对我的技术太挑剔。如果重要的话,我在eclipse中工作

以下是我目前的代码:
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.TimerTask;
公共类ImageGallery扩展JFrame
{
private ImageIcon myImage1=新的ImageIcon(“jummy.jpg”);
私有ImageIcon myImage2=新的ImageIcon(“Desert.jpg”);
private ImageIcon myImage3=新的ImageIcon(“jellyphish.jpg”);
private ImageIcon myImage4=新的ImageIcon(“Penguins.jpg”);
JPanel ImageGallery=新的JPanel();
私有图像图标[]myImages=新图像图标[4];
私有整数索引=0;
公众影像廊()
{   
添加(新JLabel(myImage1));
myImages[0]=myImage1;
myImages[1]=myImage2;
myImages[2]=myImage3;
myImages[3]=myImage4;
添加(ImageGallery,BorderLayout.NORTH);
JButton-PREVIOUS=新JButton(“PREVIOUS”);
JButton PLAY=新JButton(“PLAY”);
JButton STOP=新JButton(“STOP”);
JButton NEXT=新JButton(“NEXT”);
JPanel菜单=新建JPanel();
设置布局(新的网格布局(1,4));
菜单。添加(上一个);
菜单。添加(播放);
菜单。添加(停止);
菜单。添加(下一步);
添加(菜单,BorderLayout.SOUTH);
//寄存器侦听器
PreviousButtonListener PreviousButton=新的PreviousButtonListener();
PlayButtonListener PlayButton=新的PlayButtonListener();
StopButtonListener StopButton=新的StopButtonListener();
NextButtonListener NextButton=新的NextButtonListener();
//将侦听器添加到相应的组件集中
PREVIOUS.addActionListener(PreviousButton);
PLAY.addActionListener(播放按钮);
addActionListener(停止按钮);
NEXT.addActionListener(NextButton);
}
公共静态void main(字符串[]args)
{
ImageGallery框架=新建ImageGallery();
框架设置尺寸(490430);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(空);
}
类PreviousButtonListener实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
如果(curImageIndex>0&&curImageIndex=0&&curImageIndex<3)
{ImageGallery.remove(0);
curImageIndex=curImageIndex+1;
图像图标图像=我的图像[图像索引];
添加(新JLabel(TheImage));
ImageGallery.validate();
ImageGallery.repaint();
}
其他的
{   
ImageGallery.remove(0);
添加(新JLabel(myImage4));
库里马指数=3;
ImageGallery.validate();
ImageGallery.repaint();
}
}
}
}

您需要为幻灯片放映使用一个线程。如果此标志更改,您可以在run方法中使用标志继续显示或停止,例如布尔变量。您可以在中看到一个示例。

以下是一些指导原则,可以帮助您开始:

首先,您需要一个单独的线程来控制不断变化的图像。我建议您编写一个实现的类。重写此类中的run()方法。在这个运行方法中,您应该使用功能来更改当前显示的图像(类似于您在下一个和上一个函数中所做的操作)

在play button的actionPerformed()方法中,您需要创建一个Timer类的实例,并使用scheduleAtFixedRate(TimerTask,long delay,long period)方法启动计时器(但也可以使用此类中的其他方法,scheduleAtFixedRate()似乎更合适)


对于停止,您需要添加足够的功能,使用timer类中的cancel()方法停止正在运行的计时器

  • 我认为这是一个为幻灯片放映工作的地方

  • 把图像放到


这显示了一个启动/停止按钮,用于控制
javax.swing.Timer
。不要每次都更换标签,只需更新标签的
图标,如@mKorbel所示。

不要将
java.util.Timer
用于Swing,尽量避免使用它,因为通过它进行Swing更新将成为您的一大难题,因为您必须在EDT事件调度程序线程上执行这些更新。试试看,这里有一个小程序可以帮助你进行与Swing相关的操作,你最好使用Swing定时器。由于所有与Swing相关的操作都应该在EDT上进行,Swing计时器会为您解决这一问题,因此您不确定
CardLayout
是否是最佳选择。这意味着您将所有图像都存储在内存中,并且根据要查看的图像的大小/数量,可能会消耗大量内存。在这种情况下,我会选择
边框布局
,并始终替换image@Robin有1)内存用于已加载的图像2)图形2)D内存3)一些
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();
                }

        }
    }
}