Java 带有图像的GUI窗口

Java 带有图像的GUI窗口,java,image,user-interface,io,Java,Image,User Interface,Io,我正在创建一个gui,上面有一个图像,下面有一个按钮。 每次单击按钮时,图像都会发生变化,并将 能够更改图像3次,并在第一次更改时重新开始 我遇到了一个问题,希望有人能回答 这是我的密码 import java.awt.*; import java.awt.event.*; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JLabel; import java.io.*; pub

我正在创建一个gui,上面有一个图像,下面有一个按钮。 每次单击按钮时,图像都会发生变化,并将 能够更改图像3次,并在第一次更改时重新开始 我遇到了一个问题,希望有人能回答 这是我的密码

import java.awt.*;
import java.awt.event.*;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

import java.io.*;


public class GUIExample extends Frame implements WindowListener,ActionListener {
Button b;
JLabel Picture;
ImageIcon pic,dup;
private int numClicks = 0;
int k = 0;
Image[] img = new Image[3];
public static void main(String[] args) throws IOException {
    GUIExample myWindow = new GUIExample("GUIExample");
    myWindow.setSize(500,500);
    myWindow.setVisible(true);
}

public GUIExample(String title) throws IOException {
    super(title);
    img[0] = ImageIO.read(new File("Earth1.jpg"));
    img[1] = ImageIO.read(new File("Earth2.jpg"));
    img[2] = ImageIO.read(new File("Earth3.jpg"));

    setLayout(new FlowLayout());
    addWindowListener(this);
    b = new Button("Change Image");
    Image i = img[0].getScaledInstance(300, 300, java.awt.Image.SCALE_SMOOTH);
    pic = new ImageIcon(i);
    Picture = new JLabel(pic);
    add(Picture);
    add(b);
    b.addActionListener(this);
}


public void actionPerformed(ActionEvent e) {
    numClicks++;
    System.out.println("a");
    System.out.println(numClicks);
    paint1();
}

public void paint1()
{
    System.out.println("b");
    switch(numClicks){
    case 1 : k = 1;
    break;
    case 2 : k = 2;
    break;
    case 3 : k = 0;numClicks = 0;
    break;
    }
    System.out.println(k);
    Image t = img[k].getScaledInstance(300, 300, java.awt.Image.SCALE_SMOOTH);
    pic.setImage(t);
    Picture.setIcon(pic);
}

public void windowClosing(WindowEvent e) {
    dispose();
    System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
}

这是我得到的错误

Exception in thread "main" javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
at gui.GUIExample.<init>(GUIExample.java:28)
at gui.GUIExample.main(GUIExample.java:21)
线程“main”javax.imageio.IIOException中的异常:无法读取输入文件! 位于javax.imageio.imageio.read(未知源) 在gui.GUIExample.(GUIExample.java:28) 位于gui.GUIExample.main(GUIExample.java:21) 有没有一个更简单的方法来加载我的照片到这个不使用IO,这是一个新的概念,我。 任何关于如何正确运行的其他建议都将不胜感激


谢谢

这里混合了两种GUI框架

  • AWT(框架、按钮)
  • 摆动(JLabel)
最好选择较新的秋千

开始:

字段:

nextAction
是一个解耦的“动作”,您可以重复使用它,按下按钮,同时将其放在菜单栏的菜单中

构造函数构建所有:

默认情况下,那些
add(…)
s引用的内容窗格与您一样位于边框布局中

就这样


AbstractAction中的
{…}
构造是一个初始化程序块,就像构造函数一样。

这些.jpg文件有效吗?是的,我将它们导入到我的包中了。导入是什么意思?如果它们在你的罐子里,你必须以另一种方式访问它们。哇,这起作用的唯一问题是它向我吐回的是退出关闭不起作用它不会关闭它说它不能定义为变量,我知道退出关闭正常工作。问题是什么
public class SlideShow extends JFrame {

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            new SlideShow().setVisible(true);
        }});
}
private Image[] imgs;
private int currentImgIndex;
private JLabel imageComponent = new JLabel();
private Action nextAction = new AbstractAction() {
    {
        putValue(NAME, "Next");
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        currentImgIndex = (currentImgIndex + 1) % imgs.length;
        imageComponent.setIcon(new ImageIcon(imgs[currentImgIndex]));
        imageComponent.repaint(50L);
    }
};
public SlideShow() {

    String dir = "C:/.../media";
    try {
        imgs = new Image[3];
        imgs[0] = ImageIO.read(new File(dir + "/image2.png"));
        imgs[1] = ImageIO.read(new File(dir + "/image5.png"));
        imgs[2] = ImageIO.read(new File(dir + "/image12.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    setTitle("Slide Show");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setBounds(0, 0, 800, 600);

    add(imageComponent, BorderLayout.CENTER);

    JButton nextButton = new JButton(nextAction);
    nextButton.setPreferredSize(new Dimension(100, 30));
    add(nextButton, BorderLayout.SOUTH);

    imageComponent.setIcon(new ImageIcon(imgs[currentImgIndex]));        
}