作为一名非 java 专家,我想知道如何更改下面的代码以使其正常工作。这是我想做的
- 调用java代码时
args
包含多个图像文件名 - 我想查看此列表中的第一张图片
- 然后当我按下一个键时,一个索引会改变,并显示下一个图像。
使用下面提出的建议,这是一段可编译的运行代码:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class LoadImageApp extends Component {
BufferedImage img;
private static int index = 0;
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public LoadImageApp(String filename) {
try {
img = ImageIO.read(new File(filename));
} catch (IOException e) {
System.out.println(e.getMessage());
System.exit(0);
}
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(100,100);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
static public void changeImage(JFrame frame, String filename) {
System.out.println("Using file "+filename);
frame.add(new LoadImageApp(filename));
frame.pack();
frame.setVisible(true);
frame.repaint();
}
public static void main(final String[] args) {
char c=0;
String filename = args[0];
int numberImages = args.length;
final JFrame f = new JFrame("Load Image Sample");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
f.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent event) {
int key = event.getKeyCode();
if (key==81) {
System.exit(0);
} else if (key==89) {
System.out.println("yes");
} else if (key==78) {
System.out.println("no");
}
index += 1;
f.removeAll();
changeImage(f, args[index]);
}
});
// show first image here
changeImage(f, args[index]);
}
}
如果我使用像这样的代码
java LoadImageApp *.jpg
它只显示第一张图片。我可以按键,但显示的图像没有改变。我想改变图像。
我已经找到revalidate()
了repaint()
可能的解决方案。尽管frame.revalidate()
根本不存在,frame.repaint()
(inside changeImage
) 仍然没有改变任何东西。我仍然看到显示的第一张图片。
无论如何,这是正确的方法吗?有没有更优雅的方式?