JFrame에 표시 할 이미지 세트가 있습니다. 그들은 모두 같은 크기입니다 - 각 이미지는 JFrame을 채 웁니다.콘텐츠 스케이프의 Java swing 스와핑 ImagePanels
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();
}
};
첫 번째 이미지 표시 등 원하는. 클릭하면 제게 두 번 클릭하면 흰색이되고, 세 번째로 클릭하면 원하는대로 첫 번째 이미지가 다시 표시됩니다. 흰색 클릭 사이에 프레임을 클릭하면 두 번째 및 세 번째 이미지가 나타나고 일단 렌더링되면 예상대로 작동합니다. 내가 뭘 놓치고 있니?
알아두기! 의심의 여지가 훨씬 더 좋은 방법 ... CardLayout
모두 패널을 넣어
감사
더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. (내 답변은 전적으로 '스왑'이라는 단어를 기반으로했습니다.) –
BTW - 'ImagePanel'에 물건 (예 : 구성 요소)을 추가 하시겠습니까? 그렇지 않다면 mKorbel이 제안한 'JLabel'이 훨씬 쉽습니다. –
BufferedImages에서 ARGB를 분석 할 계획입니다 (읽기 전용). 나는 JLabel을 보았지만 각각의 BufferedImage에 도착하는 방법은 불분명했습니다. SSCCE 심판에 감사드립니다. – DJC