소스코드는 관련 사항입니다.
제작 환경은
OS : Windows XP Home Edition servicePack 2
JDK버전 : java 1.5.0_11
기타 사항 : SWT 툴킷 사용(가장 최신 버전)
사용 IDE : Eclipse 3.2 version
SWT와 Browser 위젯사용법에 대해서는 아래 사이트를 참조 하세요
(출처 이클립스 카페) http://www.java2s.com/Tutorial/Java/
소스 관련 문의는 게시판에 글로 올려 주시길 바랍니다.
/*----------------- 소스 코드 -------------------------*/
import! org.eclipse.swt.*;
import! org.eclipse.swt.SWT;
import! org.eclipse.swt.graphics.Point;
import! org.eclipse.swt.layout.*;
import! org.eclipse.swt.widgets.*;
import! org.eclipse.swt.browser.*;
import! org.eclipse.swt.graphics.*;
import! org.eclipse.swt.events.*;
/* 프로그램 정보
* 제작자 : Kay
* 연락처 : 여기 덧글 게시판 아니면 맨 아래 카페 주소로 이야기 해 주세요
* 제작목적 : 업무에 좀 보탬이 되볼려고...
* 기능... 그냥 익스플로러와 같다... 단지 다른점이라면...
* 익스플로러와 달리 어느 사이트에서든지 소스 보기가 되었다가 안되는 곳이 생겼음
* 제작일 :
* 제 1 차 : 2007년 4월 25일 ~ 2007년 5월 12일 .....
* 후기 :
* 겁나 삽질 많이 했다.. 진짜......
* 도움이 된 사이트가 있다면....
* http://www.java2s.com/Tutorial/Java/
* 위 사이트에서 SWT 사용법을 익혔다......
*
* 이 프로그램도.... 내가 진행하는 오픈프로젝트의 원칙에 따라 공개하는 바이다.. 소스 copy해서 써도 된다..
* 단! 원본에 대한 출처를 실행시 도움말에 반드시 적어야 한다.. 그렇지 않을경우 저작권법에 의해 소송 당하실수도 있습니다.
*/
public class nm_Frame {
Display display = null; // 디스플레이
Shell sh = null; // 쉘 화면....
Browser brow = null; // 브라우져 화면
Composite panel = null; // 자바에서 패널 역할을 하는 중간 컨테이너 위젯
Composite pan_s = null; // 하단 컨테이너
Label name = null; // 표기용
Button back = null; // 뒤로가기
Button next = null; // 앞으로돌아가기
Button update = null; // 새로고침
Button stop = null; // 중지하기
Text url_t = null; // 주소 입력창
Text url_s = null; // 커서로 지정된 부분 url 보기
Label loc_s = null; // location Event 확인
ProgressBar p_bar = null; // 상태 바...
// 메뉴 컴포넌트 선언
Menu main_m = null;//메뉴바가 될 부분..
MenuItem file_m = null; //파일메뉴
Menu file_s = null;// 파일메뉴 하위...
MenuItem s_update = null; //새로고침
MenuItem s_back = null; // 뒤로
MenuItem s_next = null; // 앞으로
MenuItem s_close = null; // 종료
MenuItem help_m = null; //헬프 메뉴
Menu help_s = null; // 헬프 메뉴 하위
MenuItem hs_info = null;
public nm_Frame() {
// 생성자 영역
}
public void set_Design() { // 컴포넌트 배치 설정
display = new Display();
sh = new Shell(display);
sh.setLayout(new FormLayout());
sh.setLocation(10, 10);
sh.setSize(1000,700);
sh.setText("Swt&Java WebBrowser 0.01b");
// 폰트설정
Font font = new Font(sh.getDisplay(), new FontData("SansSerif", 12, SWT.NORMAL));
// 메뉴 세팅
main_m = new Menu(sh, SWT.BAR); //메뉴바가 될 부분...
sh.setMenuBar(main_m);
file_m = new MenuItem(main_m, SWT.CASCADE); //파일메뉴
file_m.setText("&FILE");
file_s = new Menu(sh, SWT.DROP_DOWN);// 파일메뉴 하위...
file_m.setMenu(file_s);
s_update = new MenuItem(file_s, SWT.PUSH); //새로고침
s_update.setText("Refresh");
s_back = new MenuItem(file_s, SWT.PUSH); // 뒤로
s_back.setText("Back");
s_next = new MenuItem(file_s, SWT.PUSH); // 앞으로
s_next.setText("Forward");
s_close = new MenuItem(file_s, SWT.PUSH); // 종료
s_close.setText("Close");
help_m = new MenuItem(main_m, SWT.CASCADE); //헬프 메뉴
help_m.setText("&HELP");
help_s = new Menu(sh, SWT.DROP_DOWN); // 헬프 메뉴 하위
help_m.setMenu(help_s);
hs_info = new MenuItem(help_s, SWT.PUSH); // 프로그램 정보
hs_info.setText("Program Info");
// 상단 url 및 관련 버튼 위치 설정을 잡기위한 컨터이너 위치 지정
panel = new Composite(sh, SWT.NONE);
FormData f_top = new FormData();
f_top.top = new FormAttachment(0, 0);
f_top.left = new FormAttachment(0, 0);
f_top.right = new FormAttachment(100, 0);
panel.setLayoutData(f_top);
panel.setLayout(new FormLayout());
//panel.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
// 이전페이지 보기 버튼
back = new Button(panel, SWT.PUSH);
back.setText("뒤로가기");
back.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
FormData n_1 = new FormData();
n_1.top = new FormAttachment(5,1);
n_1.left = new FormAttachment(1,0);
back.setLayoutData(n_1);
// 앞에 페이지 보기 버튼
next = new Button(panel, SWT.PUSH);
next.setText("앞으로가기");
next.setBackground(display.getSystemColor(SWT.COLOR_BLACK));
next.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
FormData n_2 = new FormData();
n_2.top = new FormAttachment(5,1);
n_2.left = new FormAttachment(back,5);
next.setLayoutData(n_2);
// 주소 라벨
name = new Label(panel, SWT.NONE);
name.setText(" URL : ");
name.setFont(font);
FormData n_3 = new FormData();
n_3.top = new FormAttachment(5,3);
n_3.left = new FormAttachment(next,2);
name.setLayoutData(n_3);
// 주소 텍스트창
url_t = new Text(panel, SWT.BORDER);
url_t.setFont(font);
FormData n_4 = new FormData();
n_4.top = new FormAttachment(5,0);
n_4.left = new FormAttachment(name,2);
n_4.right = new FormAttachment(80,0);
url_t.setLayoutData(n_4);
// 중지 버튼....
stop = new Button(panel, SWT.PUSH);
stop.setText("중지하기");
FormData n_5= new FormData();
n_5.top = new FormAttachment(5,1);
n_5.left = new FormAttachment(url_t,5);
stop.setLayoutData(n_5);
// 새로고침....
update = new Button(panel, SWT.PUSH);
update.setText("새로고침");
FormData n_6= new FormData();
n_6.top = new FormAttachment(5,1);
n_6.left = new FormAttachment(stop,5);
update.setLayoutData(n_6);
// 여기까지 중간 영역 컴포넌트 배치....
// 하단 영역 위치 지정
pan_s = new Composite(sh, SWT.NONE);
FormData f_sou = new FormData();
f_sou.bottom = new FormAttachment(100, 0);
f_sou.left = new FormAttachment(0, 0);
f_sou.right = new FormAttachment(100, 0);
pan_s.setLayoutData(f_sou);
pan_s.setLayout(new FormLayout());
// 현재 url 주소를 보기 위한 컴포넌트 위치 지정
url_s = new Text(pan_s, SWT.NONE | SWT.BORDER);
//url_s.setBackground(display.getSystemColor(SWT.COLOR_BLACK));
//url_s.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
FormData s_sou1 = new FormData();
s_sou1.top = new FormAttachment(5,3);
s_sou1.left = new FormAttachment(0,0);
s_sou1.right = new FormAttachment(80,0);
url_s.setEditable(false);
url_s.setLayoutData(s_sou1);
// 페이지 표시 상태 표기 컴포넌트 위치 지정
p_bar = new ProgressBar(pan_s, SWT.BOLD);
p_bar.setBackground(display.getSystemColor(SWT.COLOR_DARK_GRAY));
FormData s_sou2 = new FormData();
s_sou2.top = new FormAttachment(5, 4);
s_sou2.left = new FormAttachment(url_s, 20);
p_bar.setLayoutData(s_sou2);
// 중간 브라우저 영역 위치 지정
brow = new Browser(sh, SWT.BORDER);
FormData f_cen = new FormData();
f_cen.top = new FormAttachment(panel);
f_cen.bottom = new FormAttachment(pan_s);
f_cen.left = new FormAttachment(0, 5);
f_cen.right = new FormAttachment(99, 10);
brow.setLayoutData(f_cen);
loc_s = new Label(sh, SWT.NONE);
loc_s.setBounds(410,670,400,20);
url_t.setText("http://www.naver.com");
brow.setUrl(url_t.getText());
//컴포넌트 위치 설정 여기까지 아래는 시스템 창 열기...
sh.open(); // 쉘 오픈
set_Event(); // 이벤트 등록 메소드 실행
while (!sh.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
// 이벤트 등록 메소드 이벤트 관련한 부분은 전부 in-line class를 이용하였습니다.
public void set_Event() {
// 브라우저에서 링크 상태를 나타내주는 이벤트 등록
brow.addStatusTextListener(new StatusTextListener() {
public void changed(StatusTextEvent te) {
url_s.setText(te.text);
}
});
// 브라우저에서 페이지 로딩 상태 표기 이벤트 등록
brow.addProgressListener(new ProgressListener() {
public void changed(ProgressEvent pe) {
if(pe.total != 0) {
int per = pe.current * 100 / pe.total;
p_bar.setSelection(per);
}
}
public void completed(ProgressEvent pe) {
p_bar.setSelection(0);
}
});
// 브라우저내 현재 브라우저에서 표기하는 url주소 표기 이벤트 등록
brow.addLocationListener(new LocationListener() {
public void changed(LocationEvent le) {
if(le.top) {
url_t.setText(le.location!);
}
}
public void changing(LocationEvent le) {
}
});
// 브라우저가 표기하는 페이지에서 윈도우 닫기 스크립트가 있을경우 처리하기 위해 등록
brow.addCloseWindowListener(new CloseWindowListener() {
public void close(WindowEvent we) {
Browser bw = (Browser)we.widget;
Shell sl = bw.getShell();
sl.close();
}
});
// 브라우저내 오른쪽 버튼으로 새창 열기 하면 익스플로러가 아닌 SWT창으로 새창 열기
brow.addOpenWindowListener(new OpenWindowListener() {
public void open(WindowEvent we) {
Shell n_sh = new Shell(display);
n_sh.setText("New Window");
n_sh.setLayout(new FillLayout());
Browser n_br = new Browser(n_sh, SWT.NONE);
we.browser = n_br;
n_sh.open();
}
});
// 각종 버튼들 이벤트 설정
// 뒤로가기 버튼
back.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent se) {
brow.back();
}
});
// 앞으로가기 버튼
next.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent se) {
brow.forward();
}
});
// 뒤로가기 버튼
stop.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent se) {
brow.stop();
}
});
// 앞으로가기 버튼
update.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent se) {
brow.refresh();
}
});
// 주소 창에 주소 입력 후 엔터 버튼 누를경우 해당 사이트로 브라우저 영역 고침
url_t.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
if(ke.keyCode == 13) {
brow.setUrl(url_t.getText());
}
}
});
// 여기서 부터 메소드끝날때까지는 메뉴 이벤트 처리 영역
// refresh 메뉴
s_update.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event ev) {
brow.refresh();
}
});
//back 메뉴
s_back.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event ev) {
brow.back();
}
});
//next(forward) 메뉴
s_next.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event ev) {
brow.forward();
}
});
//close 메뉴
s_close.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event ev) {
try {
display.dispose();
} catch(Exception ex) {}
}
});
// 프로그램 정보 메뉴 이벤트 등록(관련하여 info 내용을 등록함...
hs_info.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event ev) {
try {
Shell n_sh = new Shell(display);
n_sh.setText("프로그램 정보 ");
n_sh.setLayout(new FillLayout());
Browser n_br = new Browser(n_sh, SWT.NONE);
String e_text = "<html> <head> " +
"<meta http-equiv=Content-Type content=\"text/html; charset=ks_c_5601-1987\">" +
"<meta name=Generator content=\"Microsoft Word 10 (filtered)\">" +
"<title>Swt&Java WebBrowser [ver</title>" +
"<style> <!-- /* Font Definitions */" +
"@font-face " +
"{font-family:바탕;panose-1:2 3 6 0 0 1 1 1 1 1;} @font-face {font-family:"+
"\"\\@바탕\"; panose-1:2 3 6 0 0 1 1 1 1 1;} " +
"/* Style Definitions */" +
"p.MsoNormal, li.MsoNormal, div.MsoNormal " +
" {margin:0cm; " +
" margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; " +
" text-autospace:none; word-break:break-hangul; font-size:10.0pt; " +
" font-family:바탕;} a:link, span.MsoHyperlink {color:blue; " +
" text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed " +
" {color:purple; text-decoration:underline;} " +
"/* Page Definitions */ " +
" @page Section1 " +
" {size:595.3pt 841.9pt; " +
" margin:99.25pt 55.3pt 3.0cm 3.0cm; "+
"layout-grid:18.0pt;} div.Section1 {page:Section1;} " +
"--> " +
" </style> </head> " +
"<body lang=KO link=blue vlink=purple> " +
"<div class=Section1 style='layout-grid:18.0pt'>" +
"<p ><b><span style='font-size:14.0pt;font-family:" +
"\"Courier New\";color:navy'>Swt&Java WebBrowser [ver. 0.01b]</span></b></p>"+
"<p ><span > </span></p> "+
"<p ><b><span style='font-size:12.0pt;color:#3366FF'>1. " +
" 프로그램 라이센스 정보</span></b></p>" +
"<p ><span > @ 이 프로그램은 저작자의 동의없이 상업을 목적으로 판매 할 수 없습니다.</span></p>"+
"<p ><span > @ 이 프로그램을 사용 하다 발생 되는 문제에 대해선 저작자가 책임지지 " +
"않습니다.</span></p>"+
"<p ><span > @ 이 프로그램은 저작자의 Open Project 의 일환으로 제작된"+
"프로그램으로써</span></p> "+
"<p ><span > 소스코드를 공개 하는 바입니다.</span></p>"+
"<p style='margin-right:-4.0pt;text-indent:20.0pt'><span " +
" style='color:#FF6600'>(단! 이 프로그램의 기능을 이용한 프로그램 제작시 실행에 출처를 밝혀 주셔야 합니다.)</span></p>" +
"<p style='margin-right:-4.0pt'><span "+
"style='color:#FF6600'> </span></p>"+
"<p style='margin-right:-4.0pt'><b><span +
"style='font-size:12.0pt;color:#3366FF'>2. 프로그램에 관련하여 문의</span></b></p>"+
"<p style='margin-right:-4.0pt'><span "+
"style='color:#FF6600'> </span><span >@ 저작자가 운영하는 블로그나 카페를 통해 문의"+
"하여 주시기 바랍니다.</span></p>"+
"<p style='margin-right:-4.0pt;text-indent:25.0pt'><span "+
"> 블로그 : <a href=\"http://blog.naver.com/ind4\">http://blog.naver.com/ind4</a> "+
" 카 페 : <a href=\"http://cafe.naver.com/tgof\">http://cafe.naver.com/tgof</a>"+
"</span></p>"+
"<p style='margin-right:-4.0pt'><span > </span></p> "+
"<p style='margin-right:-4.0pt'><b><span "+
"style='font-size:12.0pt;color:#3366FF'>3. 개발 후기</span></b></p>"+
"<p style='margin-right:-4.0pt;text-indent:10.0pt'><span "+
">@ 원래 순수 자바로만 제작할려고 했으나 저작자의 내공부족으로 시련을 겪다가 SWT라는</span></p>"+
"<p style='margin-right:-4.0pt;text-indent:10.0pt'><span"+
"> 이클립스 plug-in을 발견하여 제작하게 되었습니다. SWT를 좀더 일찍 알았다면 좋았을</span></p>"+
"<p style='margin-right:-4.0pt;text-indent:10.0pt'><span"+
"> 거라 생각하며 또 다른 프로그램을 제작 하러 오늘도 공부 하려 합니다.</span></p>"+
"</div> </body> </html> ";
n_br.setText(e_text);
n_sh.open();
} catch(Exception ex) {}
}
});
} // end of set_Event()
public static void main(String args[]) { // 메인 메소드
nm_Frame nm = new nm_Frame();
nm.set_Design();
}
}
출 처 : http://cafe.naver.com/tgof/208 (N 모사에 운영 되고 있는 내 카페)