자바 (이클립스) 관련 문제 입니다
레오
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 = 4; //그림폭 변경
layoutShell.marginWidth = 40; // 좌우 여백 폭 변경
layoutShell.marginHeight = 15; //상하 여백 폭 변경
layoutShell.horizontalSpacing = 30; //버튼 사이의 폭 변경
layoutShell.verticalSpacing =15; //버튼아래 폭 변경
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 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 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); //다음 이미지 불러오기(보기)
}
}
);
lblImage = new Label(shell, SWT.NONE); //새로운 레이블 인스턴스 설정
gridlblImage = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); //가운대 정렬
gridlblImage.horizontalSpan = 4; //4칼럼을 설정
&nbs
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(.bmp) || name.endsWith(.gif) || name.endsWith(.jpg) ); //순서대로 이미지를 출력
}
}
);// 현재 열린 파일을 같은 폴더에 있는 이미지 파일들을 모두 이름 순으로 정렬한다
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()메소드를 호출, (이미지 파일을 보여주고, 앞 또는 뒤에 있는 파일을 보여주는 역할을 하는 메소드)
}
}
이미지뷰어 만들기 입니다
완성된 소스인데요~ 여기서 버튼의 크기를 바꿀까 합니다 버튼의 위치랑..
근데 어떻게 해야 할지 하나두 모르겠더라구요..
소스는 학교에서 공개된 소스인데..
이걸 열면 파일열기 이전이미지 다음 이미지
이렇게 차례대로 버튼이 있습니다
이걸 이전이미지 파일열기 다음이미지 순서로 바꾸고
파일열기 버튼을 이전이미지 버튼이나 다음이미지 버튼보다 작게 만들려구 하는데요
어떻게 해야할지 하나도 모르겠습니다
어떻게 바꿔야 하는지좀 알려주세요..
-
피리
버튼위 위치는 바꿀수 있겠네요^^ 답변 감사합니다~ 학교는 지방의 S대라고 까지만 말할께요..허헛 세밀한 답변 감사합니다^^
-
알찬바로
학교가 어디신가요? 보통 자바 과목에서는 SWT를 안 배울텐데.....
버튼의 위치는 프레임(Shell)에 추가되는 순서로 버튼이 나타나는 순서가 정해집니다.
따라서, 버튼의 위치를 바꾸고자 한다면, btnPrev 버튼 부분을 통채로 다른 버튼들 보다 위에 위치하도록 하면 됩니다.
그리고 버튼의 크기는 setSize()를 통해 크기를 설정할 수 있으나, 현재 코드에서는 GridData로 버튼의 레이아웃을 설정했기 때문에 setSize()가 먹히지 않습
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2696792 | Doctype 문의 | 떠나간그녀 | 2025-06-02 |
2696683 | 컴파일된 클립 질문 드립니다. | 흰추위 | 2025-06-01 |
2696656 | C질문요 (4) | 블랙캣 | 2025-05-31 |
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 |