私はJFrameに表示したい画像のセットを持っています。それらはすべて同じサイズです - 各イメージはJFrameを満たします。Java Swing ImagePanelsをContentPaneに入れてください
f = new JFrame("xx");
f.setSize(480, 854);
contentPane = f.getContentPane();
ip1 = new ImagePanel(new File("assets/1.jpg"));
ip2 = new ImagePanel(new File("assets/2.jpg"));
ip3 = new ImagePanel(new File("assets/3.jpg"));
f.setVisible(true);
contentPane.add(ip1);
contentPane.addMouseListener(mouseListener);
アンImagePanelがある:私は表示され、レイヤースタイルの間のスワップ
public class ImagePanel extends JPanel {
private BufferedImage image;
@Override
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, null);
}
public ImagePanel(File imageFile) {
try {
image = ImageIO.read(imageFile);
} catch (IOException e) {
System.out.println("Image could not be read: " + imageFile);
}
setVisible(true);
}
}
そして私はのMouseListenerに、それらの間に交換してみてください:
static MouseListener mouseListener = new MouseListener() {
private int i = 1;
@Override
public void mouseClicked(MouseEvent e) {
// logger.log(Level.INFO, e.toString());
contentPane.removeAll();
if (++i > 3) i = 1;
switch (i) {
case 1: contentPane.add(ip1); break;
case 2: contentPane.add(ip2); break;
case 3: contentPane.add(ip3); break;
}
contentPane.repaint();
}
};
最初の画像のように表示され希望。 Clickは私を白くして2回目のクリックで同じ、3回目は私の最初のイメージを望みどおりに戻します。 フレームをクリックすると、白とびの間に2番目と3番目の画像が表示され、レンダリングされると期待どおりに機能します。私は何が欠けていますか?
Ack、newbs!もっと良い方法があると間違いありません...
おかげ
すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 (私の答えは「スワップ」という言葉に完全に基づいていました。) –
BTW - 物件(例:コンポーネント)を 'ImagePanel'に追加しますか?もしそうでなければ、mKorbelによって提案された 'JLabel'がはるかに簡単です。 –
私は、BufferedImagesのARGBの解析を計画しています(読み取り専用)。私はJLabelを見ましたが、それぞれのBufferedImageに到達する方法は不明でした。 SSCCEの参考に感謝します。 – DJC