Cute Apple
본문 바로가기
개발/java

java 갤러리

by 미댕댕 2021. 5. 17.

작업 결과물

 

 

작업파일

 


 

1. Gallery.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package app0512.graphic;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
 
public class Gallery extends JFrame implements ActionListener{
    //커스터마이징 할 필요가 있으니, JPanel의 코드를 수정하자
    GalleryDetail galleryDetail; //상세이미지 그려질 패널
    
    JPanel p_south; //커스터마이징 할필요없으니깐 그냥 쓰자
    JButton bt_prev;
    JButton bt_next;
    
    //겔러리에 사용할 데이터 즉 배열을 준비하자!!!
    String dir="C:\\koreaIT\\javaworkspace\\app0512\\res\\images"//디렉토리
    String[] arr= {"1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg"};//파일명
    Toolkit kit;
    Image[] image=new Image[arr.length]; //배열생성
    int index=3//이미지 배열의 접근용 index 
    
    public Gallery() {
        //생성
        galleryDetail = new GalleryDetail();
        p_south = new JPanel();
        bt_prev = new JButton("이전 사진");
        bt_next = new JButton("다음 사진");
        kit = Toolkit.getDefaultToolkit(); //인스턴스 얻기!! new하지 않고, 자바에서 준비된 메서드 이용
        
        for(int i=0;i<arr.length;i++) {
            image[i]=kit.getImage(dir+"/"+arr[i]);
        }
        
        //이미지가 생성되었으므로, 3번째 이미지를
        //디폴트로 그려지게 하자!!
        galleryDetail.setImage(image[index]);
        
        
        //레이아웃, 스타일 
        galleryDetail.setBackground(Color.CYAN);
        
        //조립 
        add(galleryDetail);//CENTER 영역에 부착
        p_south.add(bt_prev);
        p_south.add(bt_next);
        add(p_south, BorderLayout.SOUTH);
        
        bt_prev.addActionListener(this);//이전버튼과 리스너 연결 
        bt_next.addActionListener(this);//다음버튼과 리스너 연결
        
        //보여주기
        setBounds(1600100,500, 500);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public void actionPerformed(ActionEvent e) {
        //하나의  actoinPerformed메서드에서 여러 컴포넌트즉 이벤트 소스를 구분해야 한다 
        if(e.getSource() == bt_prev) {
            if(index>0) {
                index--;
            }else {
                JOptionPane.showMessageDialog(this"이전 이미지가 없습니다");
            }
        }else if(e.getSource() == bt_next) {
            if(index<arr.length-1) {
                index++//그 다음 이미지를 접근하기 위해 index 1 증가
            }else {
                JOptionPane.showMessageDialog(this"다음 이미지가 없습니다");
            }
        }
        System.out.println("index="+index);
        
        //상세보기 객체에 변경된 이미지 보내주기 
        galleryDetail.setImage(image[index]);
        galleryDetail.repaint();//다시 그리기 요청
    }
    
    public static void main(String[] args) {
        new Gallery();
    }
}
cs

- 생성자에 리스너 연결한다.

- Image 클래스는 추상클래스 이기 때문에 new 가 불가능하다. 따라서 Toolkit을 이용하여 OS경로로 접근한 이미지를 얻어올 수 있다.

 

 

 

2. GalleryDetail.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package app0512.graphic;
 
import java.awt.Graphics;
import java.awt.Image;
 
import javax.swing.JPanel;
 
//겔러리의 큰 이미지 나올 패널
public class GalleryDetail extends JPanel{
    private Image image;
    
    //누군가에 의해  Image를 넘겨받으려면, 메서드를 준비해놓아
    //야 한다!!!
    public void setImage(Image image) {
        this.image = image.getScaledInstance(500400, Image.SCALE_SMOOTH);
    }
    
    public void paint(Graphics g) {
        //그림 그려줄꺼야!!!
        g.drawImage(image , 0,0this);
    }
    
}
cs

- Jpanel 의 그림을 우리가 주도하여 수정하기위하여 따로 클래스로 정의하여 사용한다

- image는 우리가 원하는 이미지로 변경되어야하기때문에 변수로 setter를 통하여 정의한다.

반응형

'개발 > java' 카테고리의 다른 글

java 쇼핑몰 GUI(4)  (0) 2021.05.25
java 쇼핑몰 GUI(3)  (0) 2021.05.24
java 쇼핑몰 GUI(2)  (0) 2021.05.24
java 쇼핑몰 GUI (1)  (0) 2021.05.23
java Editplus / Eclipse에 .jar 추가 방법  (0) 2021.05.23

댓글