수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

자바 이클립스 관련 질문입니다

새우깡

2023.04.01

import java.io.File; //파일을 다루기 위한 자바클래스
import java.io.FilenameFilter; // 파일을 다룰때, 추가로 필요한 클래스

import org.eclipse.swt.SWT; //java의 기본패키지 (swt형식)
import org.eclipse.swt.SWTException; //컴파일이나 기타 에러시에 발생하는 에러를 관리하기 위한 패키지
import org.eclipse.swt.events.SelectionAdapter; //키보드, 마우스등의 컨트롤을 하기 위한 이벤트 클래스
import org.eclipse.swt.events.SelectionEvent; //키보드, 마우스등의 컨트롤을 하기위한 이벤트 클래스
import org.eclipse.swt.graphics.Image; //이미지를 다루기 위한 패키지
import org.eclipse.swt.graphics.ImageData; //이미지 파일을 다룰때 추가적으로 필요한 패키지
import org.eclipse.swt.layout.GridData; //실행 창에서 버튼이나 이미지들의 자리를 잡아주기위한 클래스
import org.eclipse.swt.layout.GridLayout; //실행 창에서 버튼이나 이미지들의 자리를 잡아주기위한 클래스
import org.eclipse.swt.widgets.Button; //버튼 관련 클래스
import org.eclipse.swt.widgets.Display; //실행 창을 띄우기 위한 클래스
import org.eclipse.swt.widgets.FileDialog; //파일 불러오기 대화상자를 사용하기 위한 클래스
import org.eclipse.swt.widgets.Label; //레이블 클래스
import org.eclipse.swt.widgets.Shell; //프로그램 인스턴스를 위한 클래스
public class Image_Viewer {

Display display; //디스플레이(창) 클래스의 인스턴스
Shell shell; //쉘(프로그램) 클래스의 인스턴스
GridLayout layoutShell; //레이아웃을 잡아주기 위한 클래스의 인스턴스

Label lblImage; //레이블 클레스를 이용해 이미지를 보여주기 위해 인스턴스 선언
GridData gridlblImage; //위의 레이블 인스턴스의 레이아웃(위치) 속성을 지정하기 위한 클래스 인스턴스

ImageData imageData; //이미지 데이터를 저장하기 위한 클래스의 인스턴스
Image image; //이미지를 저장하기 위한 클래스의 다른역할의 인스턴스

String currentFile; //현재 열려 있는 파일명과 PATH명을 저장하기 위한 문자열 클래스 인스턴스
String[] fileFilter; //이미지 파일만을 표시하기 위해서 사용되는 파일 확장자 필터를 위한 문자열 클래스 인스턴스

public Image_Viewer() { //클래스의 생성자 메소드

fileFilter = new String[] {*.bmp; *.gif; *.jpg}; //이미지파일을 불러들일때 파일 형식 설정
display = new Display(); // 디스플레이 인스턴스 생성
shell = new Shell(display); //쉘 인스턴스 생성, 디스플레이 인스턴스를 여기에 저장
layoutShell = new GridLayout(); //레이아웃 인스턴스 생성

shell.setText(연상이의 이미지 뷰어 1탄); // 디스플레이의 이름 설정
shell.setLayout(layoutShell);

//버튼에 관련된 명령어
layoutShell.numColumns = 6; //그림폭 변경
layoutShell.marginWidth = 50; // 좌우 여백 폭 변경
layoutShell.marginHeight = 30; //상하 여백 폭 변경
layoutShell.horizontalSpacing = 20; //버튼 사이의 폭 변경
layoutShell.verticalSpacing =10; //버튼아래 폭 변경

Button btnPrev1 = new Button(shell, SWT.PUSH); //새로운 버튼을 생성 push 버튼
GridData gridBtnPrev1 = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); //수평선상에 버튼을 생성
gridBtnPrev1.grabExcessHorizontalSpace = false; //창의크기가 바뀔때 마다 버튼을 바꿀것인가? - No
btnPrev1.setLayoutData(gridBtnPrev1); //설정된 레이아웃에 새롭게 버튼을 등록
btnPrev1.setText( ==좀더 뒤로!! ); //버튼의 명칭 설정
btnPrev1.addSelectionListener( new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { // 이버튼이 눌러졌을때 어떻게 될것인지 설정
loadFolderImage(-2); //이전 이미지 불러오기(보기)
}
}
);

Button btnPrev = new Button(shell, SWT.PUSH); //새로운 버튼을 생성 push 버튼
GridData gridBtnPrev = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); //수평선상에 버튼을 생성
gridBtnPrev.grabExcessHorizontalSpace = false; //창의크기가 바뀔때 마다 버튼을 바꿀것인가? - No
btnPrev.setLayoutData(gridBtnPrev); //설정된 레이아웃에 새롭게 버튼을 등록
btnPrev.setText( == 뒤에껄 보여줘! ); //버튼의 명칭 설정
btnPrev.addSelectionListener( new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { // 이버튼이 눌러졌을때 어떻게 될것인지 설정
loadFolderImage(-1); //이전 이미지 불러오기(보기)
}
}
);

Button btnFileOpen = new Button(shell, SWT.PUSH); //버튼을 생성 push버튼
GridData gridBtnFileOpen = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);// 수평선 상에 버튼을 생성
gridBtnFileOpen.grabExcessHorizontalSpace = false; //창의 크기가 바뀔때 마다 버튼의 크기를 바꿀것인가? - No
btnFileOpen.setLayoutData(gridBtnFileOpen); //설정된 레이아웃에 새롭게 버튼을 등록
btnFileOpen.setText( 열여라 참깨 ! ! ); //버튼의 명칭 설정
btnFileOpen.addSelectionListener( new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { //이 버튼이 눌러졌을때 어떻게 될것인지 설정
loadImageFile(); //이미지 불러오기(이미지 열기)
}
}
);
Button btnNext = new Button(shell, SWT.PUSH); //새로운 버튼을 생성 push버튼
GridData gridBtnNext = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); //수평선상에 버튼을 생셕걋?생성
gridBtnNext.grabExcessHorizontalSpace = false; //창의 크기가 바뀔때 마다 버튼의 크기를 바꿀것인가? - No
btnNext.setLayoutData(gridBtnNext);// 설정된 레이아웃에 새롭게 버튼을 등록
btnNext.setText( 앞에껄 보여줘! == ); //버튼의 명칭 설정
btnNext.addSelectionListener( new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { //이버튼이 눌러졌을때 어떻게 될것인지 설정
loadFolderImage(1); //다음 이미지 불러오기(보기)
}
}
);

Button btnNext1 = new Button(shell, SWT.PUSH); //새로운 버튼을 생성 push버튼
GridData gridBtnNext1 = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); //수평선상에 버튼을 생성
gridBtnNext1.grabExcessHorizontalSpace = false; //창의 크기가 바뀔때 마다 버튼의 크기를 바꿀것인가? - No
btnNext1.setLayoutData(gridBtnNext1);// 설정된 레이아웃에 새롭게 버튼을 등록
btnNext1.setText(좀더 앞으로!! == ); //버튼의 명칭 설정
btnNext1.addSelectionListener( new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { //이버튼이 눌러졌을때 어떻게 될것인지 설정
loadFolderImage(2); //다음 이미지 불러오기(보기)
}
}
);
lblImage = new Label(shell, SWT.NONE); //새로운 레이블 인스턴스 설정
gridlblImage = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); //가운대 정렬
gridlblImage.horizontalSpan = 4; //4칼럼을 설정
gridlblImage.widthHint = 1024;//해상도의 가로크기
gridlblImage.heightHint = 768; //해상도의 새로크기
gridlblImage.grabExcessHorizontalSpace = true; //창의 크기가 바뀔때마다 버튼의 크기를 바꿀것인가? - Yes
lblImage.setLayoutData(gridlblImage); //설정된 레이아웃에 레이블 레이아웃을 등록
} //class 종료

public void Run() { //run class 시작

shell.open(); //프로그램을 시작
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep(); //이벤트 처리
}

image.dispose(); //이미지의 인스턴스를 삭제
lblImage.dispose(); //레이블의 인스턴스를 삭제
display.dispose(); //디스플레이의 인스턴스를 삭제

}

public void loadImageFile() { //loadImageFile class시작

FileDialog dialog = new FileDialog(shell, SWT.OPEN); //파일 대화창 인스턴스 생성
dialog.setFilterExtensions(fileFilter); //파일 대화창에 필터 적용
currentFile = dialog.open(); //파일 대화창 띄우기

if (currentFile != null) { //파일이 선택되었는지 체크
try {
imageData = new ImageData(currentFile); //선택된 이미지파일에서 데이터를 읽어오기
image = new Image(display, imageData); //위에서 읽어온 이미지파일 데이터를 인스턴스에 등록
lblImage.setImage(image); //등록된 이미지 데이터를 레이블에 적용
gridlblImage.widthHint = imageData.width; //레이블의 가로크기에 맞춰서 조정
gridlblImage.heightHint = imageData.height; //레이블의 세로크기에 맞춰서 조정

} catch (SWTException ex) { //여기서 잘 알수는 없지만 움직이는 gif파일은 실패할수도 있음

lblImage.setText(GIF파일을 여는데 문제가 생겼는걸...); //gif파일을 열다가 에러가 발생했을경우 메시지
}
} else { //파일이 선택 안된경우
lblImage.setText(그림을 보고 열란 말이야!); //출력될 메시지
}

lblImage.pack(); //설정된 값을 이용하여 레이블 다시 그려주기
shell.pack(); //변경된 값을 적용하기 위해 프로그램 전체를 다시 그려주기

}

public void loadFolderImage(int prev_next) {

if(currentFile == null) return;

String fileName = getFileName(prev_next); //파일이름을 불러오기 위한 메소드 호출

if (fileName != null) { //파일이 있나 없나 검사 (없을경우 변화X)
try {
imageData = new ImageData(fileName); //파일에서부터 이미지데이터를 불러오기
image = new Image(display, imageData); //위에서 불러들인 이미지데이터를 레이블에 등록
lblImage.setImage(image); //이미지를 레이블에 적용
gridlblImage.widthHint = imageData.width; //이미지의 크기에 맞춰 레이블의 가로크기 조정
gridlblImage.heightHint = imageData.height; //이미지의 크기에 맞춰 레이블의 세로크기 조정
lblImage.pack(); //설정된 값에 적용하여 레이블에 다시 그리기
shell.pack(); //변경된 상황을 적용하기 위해 프로그램에 다시 그리기

} catch (SWTException ex) {

lblImage.setText(There was an error loading the GIF);
}
}
}

public String getFileName(int prev_next) {

int currentFileNum = 0;
File src = new File(currentFile.substring(0,currentFile.lastIndexOf(\\)));
File[] fileList = src.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name){
return (name.endsWith(.gif) || name.endsWith(.jpg) ); //순서대로 이미지를 출력 (bmp파일은 제외 용량이 크므로)
}
}
);// 현재 열린 파일을 같은 폴더에 있는 이미지 파일들을 모두 이름 순으로 정렬한다

if(fileList == null) return null; //만약에 이미지 파일이 없다면 그냥 되돌아간다
else if(fileList.length == 1) return currentFile; //현재 폴더에 이미지 파일이 하나라면, 원래 파일을 다시 열어주고 돌아간다 for (int i = 0; i fileList.length; i++) { // 현재 폴더에 이미지 파일이 다수이면, 번호를 체크하면서 넘어간다
if(fileList[i].getAbsolutePath().compareToIgnoreCase(currentFile) == 0) {
currentFileNum = i;
}
}

if(currentFileNum + prev_next 0) {// 현재 열린 파일의 번호를 기준으로, 앞 뒤에 있는 파일의 번호를 계산후에, 파일명을 돌려준다
currentFile = fileList[fileList.length-1].getAbsolutePath();
} else if(currentFileNum + prev_next = fileList.length) {
currentFile = fileList[0].getAbsolutePath();
} else {
currentFile = fileList[currentFileNum + prev_next].getAbsolutePath();
}

return currentFile;
}

public static void main(String[] args) { //메인 메소드 시작

Image_Viewer viewer = new Image_Viewer();// 이미지 뷰어를 위해 만들어진 클래스의 인스턴스를 생성한다.

viewer.loadImageFile();// 생성된 인스턴스 viewer의 loadImageFile()메소드를 호출,(loadImageFile()메소드는 파일 불러오기 기능을 위해서 만들어진 메소드_

viewer.Run();// 생성된 인스턴스 viewer의 Run()메소드를 호출, (이미지 파일을 보여주고, 앞 또는 뒤에 있는 파일을 보여주는 역할을 하는 메소드)

}
}여기서 버튼 순서 바꾸기랑 크기 바꾸기를 질문 했었는습니다. 친절한 답변으로 인해서 순서 바꾸기는 해결하였는데요
버튼 크기緻?크기 바꾸는것은 griddata때문에 설정을 할수 없다고 하셔서 설정을 없애고 setsize()를 이용해서 바꾸려고 시도를 해봤는데
제가 자바를 처음 배우는 과정에서 맞은 과제인지라 어떻게 해야 할지 모르겠더라구요. 그래서 다시한번 도움을 받고자 이곳에
글을 올립니다. 저에겐 너무 어려워서 시도를 했다가 다시 복구만 시키는것도 너무 벅차네요 차근차근 알려주시면 감사하겠습니다.

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 아빠몬

    먼저 SWT를 떠나 자바 GUI부터 살펴보시기를 권해드리고 싶습니다. 또한 API를 보는 것에 대해서도 익숙해져야 합니다. 자세히 API를 살펴보질 않아 모르겠지만, GridData 설정에서 widthHint와 heightHint에 상수값을 설정해주면 버튼의 크기가 달라져보입니다.
    예를 들면, gridBtnFileOpen.heightHint = 50;라고 설정하면, 버튼의 높이가 50px로 설정되는군요...

번호 제 목 글쓴이 날짜
2696504 플래시 위에 div 올리기 (5) 큰꽃늘 2025-05-30
2696458 제가 만든 소스 한번 봐주시고 수정 할 꺼 있으면 말해주세요. (실행은 되지만 깜빡거리네요) 이플 2025-05-29
2696434 퍼센트 레이아웃 질문인데요.. 나츠 2025-05-29
2696372 %=open_main%, %=open_sub% 가 뭘까요? (9) 행복녀 2025-05-29
2696347 콘솔 프로그램 질문 상큼한캔디 2025-05-28
2696320 c언어 scanf 함수를 이요해 문자열 입력 받을 시 질문 있습니다. 슬아라 2025-05-28
2696292 익스플로러9이상에서만 이상한 보더가 보이는데 삭제할수 있나요? 망고 2025-05-28
2696263 프로그래밍 공부시작 질문 (6) 진이 2025-05-28
2696206 SK2의 플래시를 밴치마킹하려고하는데요.. (1) 비내리던날 2025-05-27
2696179 ie7에서 사라지지가 않네요. (2) 빛길 2025-05-27
2696150 div에 스크롤 생기게 하려면... (2) 에드가 2025-05-27
2696123 자료구조론 공부중인데 김자영 2025-05-26
2696094 exe 파일 제철 2025-05-26
2696043 제이쿼리 .scroll() 관련 질문드립니다 이거이름임 2025-05-26
2695984 마크업상으로 하단에 있으나 우선적으로 이미지파일을 다운로드받는 방법 (1) 들꿈 2025-05-25
2695934 tr 속성값 (9) 새 2025-05-25
2695905 ASP로 개발됐을 때 css가 달라져요 ㅠㅠ (4) 슬아라 2025-05-24
2695878 form을 이용한 다른 페이지로 넘기는 방법을 알려주세요 (1) 핫파랑 2025-05-24
2695844 저기 암호화 및 복호화 프로그램.. 만들어볼려는대 (2) 한빛 2025-05-24
2695814 [질문] PDA에서 애플릿이 가능한가요? (1) 봄시내 2025-05-24
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com