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
) はまだ何も変更しません。最初に表示された画像がまだ表示されています。
とにかくこれは正しいアプローチですか?もっとエレガントな方法はありますか?