現在作業がうまくいかないアプリケーションの部分は、一度に1つずつ画像のリストをスクロールして表示できます。ユーザーからディレクトリを取得し、そのディレクトリのすべてのファイルをスプールして、jpegとpngだけの配列をロードしています。次に、最初の画像でJLabelを更新し、前後のボタンをスクロールして各画像を順番に表示したいとします。私は第2の画像を表示しようとすると、それは更新されません...ここで私はこれまで持っているものです:JLabelに含まれている画像の更新 - problems
public class CreateGallery
{
private JLabel swingImage;
私は画像を更新するために使用しています方法:
protected void updateImage(String name)
{
BufferedImage image = null;
Image scaledImage = null;
JLabel tempImage;
try
{
image = ImageIO.read(new File(name));
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// getScaledImage returns an Image that's been resized proportionally to my thumbnail constraints
scaledImage = getScaledImage(image, THUMB_SIZE_X, THUMB_SIZE_Y);
tempImage = new JLabel(new ImageIcon(scaledImage));
swingImage = tempImage;
}
あなたがここまで得ている場合は、最初の画像は私のdefault.jです...
private void createAndShowGUI()
{
//Create and set up the window.
final JFrame frame = new JFrame();
// Miscellaneous code in here - removed for brevity
// Create the Image Thumbnail swingImage and start up with a default image
swingImage = new JLabel();
String rootPath = new java.io.File("").getAbsolutePath();
updateImage(rootPath + "/images/default.jpg");
// Miscellaneous code in here - removed for brevity
rightPane.add(swingImage, BorderLayout.PAGE_START);
frame.add(rightPane, BorderLayout.LINE_END);
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
UIManager.put("swing.boldMetal", Boolean.FALSE);
new CreateGalleryXML().createAndShowGUI();
}
});
}
にswingImageを置く私のcreateAndShowGUI方法で次に
pg、そして一度私はディレクトリを取得し、そのディレクトリ内の最初のイメージを特定します。これは、swingImageを更新しようとすると失敗する場所です。さて、私はswingImage.setVisible()とswingImage.revalidate()を強制的に再読み込みしようとしました。私はそれが私のtempImage =根本的な新しいJLabelだと思っています。しかし、swingImageをただ更新するためにBufferedImageまたはImageをJLabelに変換する方法がわかりません。
私はあなたの 'setVisible()/ revalidate()'呼び出しがこのような状況ではうまくいかなかった理由に関する少しの情報を追加しました。うまくいけば、この予期しない振る舞いを得ている理由について、もう少し詳しく説明しておきたいと思います。 –
swingImage = tempImageの後にtrueに設定する前にsetVisible(false)のさまざまな組み合わせを試しました。 setVisible(true)の前後に.revalidate()を使って試してみました。しかし、私はそれが問題を引き起こしている新しいImageIcon(scaledImage)だと信じ始めています...まだそれを見て、それを理解しようとしています.... – Osh