반응형
앞으로 다른 것에 대한 이야기의 흐름은 언제 이어 질지 모르겠으나...

그 이야기 들중.....

검색 이야기에 대해 해 볼려고 합니다...

첫 번째 스토리로....... 네이버 검색 이야기를 하려 합니다.......

앞서 ..

네이버에 대한 상표권 및 저작권은 (주)nhn에 있음을 밝히는 바입니다.....

네이버에서 검색이 얼마나 좋은 자료를 찾아 내는지......

알려 드리도록 하겠습니다..

반응형
Posted by onlyTheOne
,
반응형

으음.. 제 블로그 방문 자 분들을 보니...

lisp 관련하여 분들이 많으신거 같습니다...

남들이 안하는 부분.....

남들에게 자료가 많지 않은 부분에 대한 자료를 많이 올리도록 하겠습니다.

그럼... 즐거운 인터넷 서핑 하세요

반응형
Posted by onlyTheOne
,
반응형
스택 예제를 예전에 구현하였던것을...

이곳에 다시 올려 둡니다.

// 스택//
#include<stdio.h>
#include<conio.h>

int stack[10];
int top;

void init_stack() {
    top = -1;
}

void push(int vall) {
  if(top >= 9)
    printf("\n######## 스택이 꽉 차버렸네요 ########\n");
  else
    stack[++top] = vall;
}

void pop() {
  if(top < 0) 
    printf("########## 더이상 비울 스택이 없습니다. ##########\n");
  else
    --top;
}

void print_stack() {
  int i;
  printf("스택 top --------------------- buttom\n");

  for(i = top; i>= 0; i--)
    printf("%d ", stack[i]);
    printf("\n");
}

void main() {
  int select_num;
  int push_num;
  int exit_flag = 0;

  printf(" 배열을 이용한 스택 프로그램 입니다. \n");

  init_stack();
  while(1) {
    printf(" 1) push 2) pop 3) data print 4) Quit! \n");
    printf(" 숫자를 선택해 주세요 : ");
    scanf("%d",&select_num);
 
    if(select_num > 3) break;
    else {
      switch(select_num) {
         case 1 :
           printf("푸쉬 숫자를 입력해 주세요 =>");
           scanf("%d",&push_num);
           push(push_num);
           printf("푸쉬(push)를 실행 했습니다\n");
         break;
         case 2:
           pop();
           printf("팝(pop)을 실행했습니다\n");
         break;
         case 3:
           print_stack();
         break;
      }
    }
  }
  printf("프로그램을 종료합니다\n");
  getch();
}
반응형
Posted by onlyTheOne
,
반응형
안녕하세요

오랜만에 강좌를 진행하는 쥔장입니다.

텍스트만 있으니 좀 그러시죠 ^^:

저도 이미지도 넣고 그러고 싶답니다.~~~

하지만 그러기는 많이 힘들다는거..

하지만 노력해 보려 합니다.

그 이야기 계속 이어 가려 합니다.

제가 자바라는 언어를 처음 접하게 된 것은...

자바로 만들어진 하늘사랑 채팅 방일 겁니다...

처음 자바라는 언어를 배운건...

2000년 4월.... 모 학원에서 시작하였습니다.

당시 저는 고2.....  (제 나이 대충 계산 되시죠 ^^:)

음 그러니... 운영체제이니, 알고리즘이니, 자료구조이니...

이런건 그냥 자격증을 따기 위한 목적으로 머 제대로 배우지도 않았지만...

프로그램이 왜 저렇게 돌아가느냐.. 이런걸 모르는 나이 였습니다.

그러니 제가 프로그램을 잘 짜는 줄 알았죠..

바로 전에는 VC++을 잠깐 배우고 있었습니다.

머 VC++이래 봤자 API가 아닌 MFC 였지만...

그렇게 시작한 자바라는 언어와의 인연...

처음 시작은... 일찍 하였으나...

저는 자바라는 언어의 빛을 많이 못 봤습니다...

하지만 좋은 분들과의 인연을 만들수 있었다는게..

(자바동 형들.. 형 들을 알게된게 저에겐 행운중 하나 였습니다.)

2001년 각종 소프트웨어 공모전에 나갔지만 전부

예선탈락이라는 수모를 당했습니다...

예선 탈락을 당한 이유는 세가지 였습니다.

하나는 심사위원분들이 자바라는 언어로 프로그램을 짤수 있는 고등학생은 없다. 라고 단정 지은 겁니다.

즉 누가 만들어서 대신 출품 하는 거라고 생각한 거죠..

자바가 2000년에 퍼지기 시작하였으니.. 그럴수 밖에요...

이건 좀 나았지만...

두번째는 심사위원분들이... 자바를 모르시는 은근히 많았습니다...

결론적으로 자바를 모르기에... 심사가 불가능하여 탈락 된거죠..

일화를 하나 말씀드리면 당시 제가 참여한 모학교 대회에 제가 출품한 작품이..

화상강의 소프트웨어 였습니다...

그런데.. 그날 출품한 학생중에.. 저와 똑같은 아이디어로 VC++로 만든 학생이 있었던 겁니다.

발표날 저는 깜짝 놀랐습니다.

그 학생은 2위를 한 것입니다.  프로그램 완성도야 자바 보다 는 좋았을 겁니다.

하지만 저는 예선 탈락이였습니다...

더욱 저를 힘들게 했던건.. 그 출품작이 이미 타 대회 입상 작품이였다는 겁니다...

한마디로 하나의 작품으로 우려 먹기를 한거죠...

그렇게... 쓴맛을 보며 공모전을 마감하며 자바와 세월을 보냈습니다...

2001년 저는 JMF라 불리우는 Java Media Framework API를 공부하며...

화상/음성 관련 부분에 대해 공부하고 있었습니다.. 물론 결과물이..

이런거 관련된 것만 나오게 됬죠... 당시 제가 JSP나 moblie로 갔다면

아마 다른 일이 발생했을 수도... 남들이 안한다는걸 한다고 자부심을 느끼며

제대로 모르는 초짜가 사고를 치며 살아 온것입니다.

자바를 잘한다고 느끼며... 전혀 아니였지만...

여기서.. 제 이야기를 마치고..

자바에 대해 다시 이야기 해 보려 합니다.

제가 자바를 처음 공부할때 자바의 버전은 혁명이라 불릴 만큼 변화가 있어서

Java2라고 불리우는 JDK 버전 1.2.1 이였습니다.. 지금 1.6이니 오래 된걸 수도 있겠네요...

그때 쓰던 IDE 중 하나가 3.0 이였고.. 윈도우가 98에서 2000으로 변화 하는 시기였습니다.

다시 생각해 보면 2000 professional 버전은 정말 가볍고 안정적인 OS인거 같습니다...

지금은 윈도우 2003 -> 비스타 까지 나왔으니..

하긴 벌써 2007년이 끝나 가니깐요.... 내년이면 벌써 자바를 안지 8년이 되가네요...

그동안 자바라는 언어를 하면서 무얼 했나 세삼 돌이켜 봅니다...

사장된 기술....그리고 잘못 선택한 choice.... 시련... 고독........

to be continue...
반응형
Posted by onlyTheOne
,
반응형

Prime 구하기 소스 올립니다.


(defun tf_prime(n i)
       (setq j 1)
       (loop
            (cond ((= (- n (* i j)) 0) (return nil))
                  ((< (- n (* i j)) i) (return t)))
            (setq j (+ j 1))))


(defun p_prime(n)
       (let ((nmt (/ (+ n 1) 2)) (counting 2))
            (loop
                (cond ((< n 4) (return t))
                      ((NOT (tf_prime n counting)) (return nil))
                      ((= counting nmt) (return t)))
                (setq counting (+ counting 1)))))


실행 방법 : ( p_prime 17) <- 요렇게 하시면 됩니다.

이렇게 되구요... 입력수가 Prime이면... T를... 아니면 nil을 반환 합니다.

사용자 지정구간에 대한 Prime은 어디가 문제 인지 모르겠는데.. 결과 도출이 또 제대로 안되네요 ㅡㅡ;

관련 부분은 소스 코드 점검을 해봐야 될거 같습니다.

구간 점검을 위한 prime 구하는 소스는 다음 번에 올려 드리겠습니다.

반응형
Posted by onlyTheOne
,
반응형

안녕하세요 생각 보다 Lisp 언어를 많이 찾아 보시는거 같으시네요 ^^:

반응이... Lisp 생각 보다 어렵고 자료구하기도 힘든거 같습니다.

이번 소스는 소수 구하기 입니다. 소수가 소숫점  1.234 이게 아니라

X라는 숫자를 나누어 떨어지는 수가 1과 자기 자신인 수 입니다.

즉, 2, 3, 5, 7, 11같은 (1 은 소수가 아니라고 합니다. 궁금하신분은 검색해 보시길...)

이 소스는 사용자로 부터 2개의 수를 입력 받아

두 수 사이의 소수를 모두 구해 내는 프로그램 입니다.

그래서!~~ 이렇게 소스를 올리고 있습니다. 물론 소스에 있는 내용을

공부도 안하면서 그냥 배끼면 안되기 때문에.!!!

저는 소스의 일부를 지워 둡니다.

정 공부하다가 모르겠다 하시는 분은 방명록이나

다른 방법으로 연락을 주신다면 힌트나 완전체 소스를 드리도록 하겠습니다.

(세상에서 가장 비싼건 공짜 이다.! )

------------------------- 아래 는 해당 소스 입니다.---------------------------------------------
1. prime 확인 함수 (인자 사용자 입력수, 나누는 수)
(defun tf_prime(n i)
(setq j 1)
/* 이 구간을 삭제 합니다.
*/
(setq j (+ j 1))))

2. prime 중간 함수 사용자로 부터 값을 받아... 해당 결과를...
prime이 아니면 nil을... prime이면 숫자를 반환
(defun p_prime(n)
(let ((nmt (/ (+ n 1) 2)) (counting 2))
(loop
/* 여기도 삭제 합니다.  */
(setq counting (+ counting 1)))))

3. (사용자 입력 받고 값 내주는 함수)
// n 부터 m까지의 prime number중 최고 높은 값 구하기
(defun primes(n m)
(let ((at n) (max_n nil))
(loop
/*  여기도 삭제 합니다.
*/
(setq at (+ at 1)))))

반응형
Posted by onlyTheOne
,
반응형
이번학기 Artificial Intelligence 수업을 듣고 있습니다.

수업 내용 중에 Lisp이라는 언어를 배우게 되었는데요

음 이 Lisp에 대한 자료를 조사해 보니...

그리 많지는 않았습니다. 우선 제가 아는 lisp은

xlisp 이라 하여 오리지날 lisp과 요즘 많이 쓰여진다고 보여지는

common lisp입니다...

common lisp에 대한 부분은 한국리습사용자모임을 방문하시면 도움이 많이 되실 겁니다.

과제로 나왔던 문제 중 하나를 코딩 한 걸 올려 둡니다.

xlisp을 이용한 sorting 이구요...

기본 알고리즘은 시간 복잡도가 linear인... 버킷 sort 입니다.

주의사항 !! 100% 완벽 지원 아닙니다.

간단히 버킷 정렬에 대해 말씀 드리면

정렬 속도를 극대화 시키기 위한 방법으로 저장공간을 사용자 입력한 데이터 만큼 이용합니다.

데이터 숫자만큼의 배열 또는 데이터를 받는 공간을 만들고 loop를 한번 돌면서..

각 공간에 매칭되는 데이터를 집어 넣고 그 결과값을 보여줍니다.

여기서 구현한건 일부 제약조건이 있지만 버킷정렬과 비슷하다고 보시면 됩니다.

어찌되었든 정렬은 되니깐요 ㅋㅋ

거의 무지 막지하게 만든 거라서요...

소스는 아래와 같습니다...

아! 그 전에 이 자료를 찾는 목적이 단순한 copy를 통한 레포트 제출용을 방지 하기 위해서

코드의 일부를 지워 두었습니다.

이 자료를 바탕으로 정렬을 만드는 법에 대해 익히는것을 바라지만...

레포트 제출용이라면 볼 필요가 없다고 생각합니다...

혹시 완전한 소스를 필요로 하신다면 방명록에 메일 주소를 남겨주시면 알려드리도록 하겠습니다.

1. array에 data를 저장 하는 함수
(defun add_arre(number)
  (setf (aref s_arr (- number 1)) number))

2. 여러 data를 array 함수로 보내는 loop용 함수
(defun sorts (l n)
  (dotimes (i n) (.....))))

3. 배열에 저장된 값을 다시 list로 반환 보여 주는 함수
(defun print_arr(n)
  ...

4. 메인 함수로 위에 선언된 함수를 호출하여 sort를 합니다.
(defun sorting (l)
  (setq num (length l)) // list의 length를 구함
  (setq s_arr (make-array num)) // array 생성
  (sorts l num) // sort 함수 호출 sorting
  (print_arr num)) // array에 저장된 값을 list 변환 출력

이렇게 코딩하시면 됩니다. 여기서 3번 함수중 맨마지막 줄을 수정하신다면 내림차순 정렬을 보실수가
있습니다.

이 소스의 단점이 하나 있는데요 바로 연속 된 수만 집어 넣어야 한다는 부분이구요
연속된 수가 1부터 시작해야 한다는 것입니다...

다음에도 xlisp에서 작성된 프로그램 예제 몇가지를 더 올리도록 하겠습니다.



반응형
Posted by onlyTheOne
,
반응형
반응형
Posted by onlyTheOne
,
반응형

원래 지금 여기에 작성된 네트워크 이야기는...

제가 타사 블로그에서 썼던 내용을....

개인적인 블로그의 이원화 정책에 따른...

자료 이동 입니다...

앞으로 진행은 이곳에서 이루어 질려고 합니다....

내가 겪은 네트워크 이야기 그 7번째.....

내가 겪은 분야는 솔직히 네트워크라는 세계에서 빙산의 일각에 불과한 영역이다...

장비 마다 Config를 만진것도 아니며... 단지 설정된 config만 보며 알았던 것이다........

난 소위 말하는 그냥 그런 곳에 있었다..

망관리실은... Network Management System 이라고 불리우는 네트워크 관리 시스템이

있다... 관리 시스템은 독립적인 서버에 있으며..

이 서버에서 네트워크에 연결된 장비들의 상태를 확인하여....

망 을 운영을 하게 된다.....

이 거 말고 Entire network Management System.이라 불리우는 것도 있다....

위에껀 지역망 개념... 아래꺼는 광역망 개념이다....
(참고로 ... 물론 저 말이 맞는 말인지 나도 잘 모른다....
          그렇기 때문에 이런 세계도 있구나 라는 것만 알아 주었으면 한다....)

저 시스템을 이용 망을 관리하다 보면 별별 일들이 다 일어 난다...

무슨일이 일어 나냐구???

갑자기 장비가 원인 모를 이유로 다운 되는 경우가 있다.....

그리고 잘쓰던 장비도 괜시리 알람을 발생시킨다.....

왜 그러냐고.... 직접 운영해 보면 알 것이다..............

하지만 저 알람이 왜 발생했는지는 핵심적인 이유는 없지만 어디서 발생했는지는 알수 있다...

오늘은 이중에서 ping을 통한 망 문제에 대해 이야기 할려고 한다...

통상적으로 흔히 쓰는.. Ping!!!

장비에 Ping 을 쏠경우... Ping은 돌아 와야 한다...

ping을 쳤을때 돌아오는 메세지 중에 보면...
   -> Reply from xxx.xxx.xxx.xxx : byte=32 time<10ms ttl=64

머 이런식으로 나온다....

저게 일반적인 ping 결과이다.. 즉....
    "ip가 부여된장비에 대해 너 장비 살아 있냐? "
물어 보면..
    "나 살아있다... 라고 알려주는 것이다..."

이런 메세지가 뜨면...
-> Request time out

응답시간 초과... 즉... 그 장비에서 응답이 없는 것이다.. 응답이 없는 이유는...
  1. 장비의 이상으로 인하여
  2. 아이피를 잘못 입력하였을 경우
  3. 운영정책에 의거 보안을 위해 ping을 반환안하도록 운영할경우
  4. 회선의 이상으로 인하여

우선 장비의 이상이라 함은 장비 전체의 문제이거나 해당 모듈 부분의 문제 아님 특정 문제로
인해서 발생할 수 있다. 어디가 문제라고 단정지을수는 없는 것이다.

아이피를 잘못입력하였을때 저 메세지가 안나오고 그위의 메세지가 나올수 있다..
그 이유는 잘못입력한 IP가 특정장비에 할당되어 있다면 거기서 받아오기 때문이다.
하지만 그 장비가 내가 원하는 장비인지는 제대로 된 IP를 알때만 가능한 것이다.

운영정책의 보안상... 요즘 별별 인간들이 다 있다... 돈을 벌기 위해, 자기 실력 과시용
등등.. 그런사람들로 부터 서비스를 안정적으로 제공하기 위해 정책적으로 ping값을
반환 안시키도록 설정하는 것이다.

회선이 죽었을때도 저 메세지가 나오는건 ??
회선이 중간에 단락되도 저렇게 나온다..(내 경험상...)

그럼 어떻게 회선이 끈어 지는지 아냐고.... KT(외 회선 서비스 제공업체)는
평상시에 원활한 서비스를 위해 거의 매일 저녁 마다

노후화 된 회선을 교체 하거나.. 회선을 이중화 작업을 한다든가... 회선이 물려진 장비를 관리를 한다....

이때.. 머피가 나에게 찾아 오면 인터넷이 안되는 경우이다... 물론 이런경우는 극히 드물다...

요즘은 거의 이중화가 되어 있기에 사용자도 모를 정도로 회선이 전환된다...

물론 누가 전봇대에 테러하면 그만이지만...

to be continue....

반응형
Posted by onlyTheOne
,
반응형

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

제작 환경은

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
,