gpt4 book ai didi

java - 制作幻灯片,自动更换图像

转载 作者:行者123 更新时间:2023-11-30 02:32:52 25 4
gpt4 key购买 nike

我的幻灯片程序有问题。我为此程序添加了两个参数:包含图像的文件夹的路径、图像重新绘制后的时间。图像应按原始大小绘制,窗口会调整为该大小。如果某些文件不是图像,程序应绘制“ERROR”语句。无论如何,该程序根本不起作用,也没有绘制任何图像。任何人都可以告诉我为什么它不绘制任何东西以及计时器是否是重新绘制图像的好方法?

public class ImagePanel extends JPanel
{

Image img;

private int period;
private int n = 0;
private File[] files;
Timer timer;
Dimension d;

public ImagePanel(File dir, int period)
{
this.period = period;

files = dir.listFiles();
loadImage(files[n++].getPath());

timer = new Timer(period, new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//Component component = (Component) e.getSource();
//JFrame f = (JFrame)
//SwingUtilities.windowForComponent(component);
//f.pack();
if (n < files.length)
{
loadImage(files[n].getPath());
}
else
{
repaint();
((Timer)e.getSource()).stop();
}
n++;
}
});

timer.start();
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;
if (img != null)
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
}

private void loadImage(String imgFileName)
{
img = new ImageIcon(imgFileName).getImage();
int w = img.getWidth(this);
int h = img.getHeight(this);
if (w != -1 && w != 0 && h != -1 && h != 0)
{
d = new Dimension(img.getWidth(this), img.getHeight(this));
}

revalidate();
repaint();
}

@Override
public Dimension getPreferredSize()
{
return new Dimension(img.getWidth(this), img.getHeight(this));
}


public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setLayout(new GridLayout(0, 1, 0, 0));

ImagePanel panel = new ImagePanel(new File(args[0]), Integer.parseInt(args[1]) * 1000);
frame.add(panel);
//frame.getContentPane().add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

}
}

最佳答案

whether Timer is good way to repaint images?

是的,您应该使用 Swing Timer 来安排动画。

Anyone could tell me why it doesn't draw anything

在您的 ImagePanel 类中,您应该创建一个类似 setImage(...) 的方法。每当您想要更改图像时,计时器代码都会调用此方法。

然后在 setImage(...) 方法中,您需要调用 repaint() 来告诉面板重新绘制自身。

关于java - 制作幻灯片,自动更换图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43824468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com