반응형

소스코드는 관련 사항입니다.

제작 환경은

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 모사에 운영 되고 있는 내 카페)
 

반응형
Posted by onlyTheOne
,