작업 결과물
작업파일
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(1600, 100,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(500, 400, Image.SCALE_SMOOTH);
}
public void paint(Graphics g) {
//그림 그려줄꺼야!!!
g.drawImage(image , 0,0, this);
}
}
|
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 |
댓글