반응형

최근 보니 제가 예전에 네이버 블로그에 올려둔 글을 발췌하여 본인이 하신것 마냥 코드 고대로 배끼신 분들이 계시는데...

인증 스크린샷 남깁니다. 

반응형
Posted by onlyTheOne
,
반응형

네 모 대학 공모전 출품 작입니다. (예선 탈락한건 함정이죠 ㅎㅎㅎ )

100% 순수 자바로 만들었던 화상 채팅 소스 입니다.

너무 오래전에 만든거라 도움이 안되실 수도 있겠지만

순수 자바로 만든 화상 채팅 관련 소스 코드는 아마 보시기 힘들 것 같아

소스코드가 엉망이고 동작 안할 수도 있지만 공유 드립니다.

이때 자바는 Sun 마이크로시스템즈사에서 제공해 주던 언어였습니다 ^^  

20년 가까이 된 코드라 실행 안될 수도 있으니 코드 구성만 참고해 보세요~

(출처 : 이전에 운영하던 프로그래밍 관련 카페 네이버에 있던... 제가 업로드 했던 글 가져 왔습니다.) 

chatting_java_source_long_time_ago.zip
0.11MB

반응형
Posted by onlyTheOne
,
반응형

요즘도 2007년에 작성한 글을 실수로 보러 오는 분들이 많은 것으로 보여진다.


지금으로 부터 약 12년 전이나 되었다.


https://opendev4u.tistory.com/22


SWT 가지고 자바 앱 만들던게 엊그제 같은데 벌써 12년...


지금은 iOS 계열의 Objective-C 만 가지고 코딩 한다. 


물론 C, C++, 요즘 Swift 까지 공부하면서 보고 있다. 


한 언어에 치중 안할려고 노력 하는데 어렵다 ㅎㅎㅎ


하면 할 수록 공부할게 많아지는 분야...


2000년 처음 자바 공부할때 대비하면


많이 바뀌었다 좋아진점은 인터넷에 자료도 많고 찾기도 수월하다.


안좋아진점은 소위 우물안 개구리 능력자들이 판을 친다.


본인들의 테크닉이 그닥 뛰어 나지 않음을 잘 모르면서


이 세상을 구원할 영웅으로 알고 있다.


하루가 멀다하고 최신기술과 더 효율적인 기법들이 나오는 세상이다.


틀에 박힌 생각을 깨고 나아갔음 한다.


나는 과거에 안주하지 않기 위해... 노력 하려한다.





반응형
Posted by onlyTheOne
,
반응형
이글은 제가 운영했던 네이버 블로그에 2009년 02월 22일에 게제되었던 글입니다.

오랜만에 Apache POI 라이브러리를 공부중이다.

 

그중 첫번째로 MS Excel에서 만든 파일의 데이타를 불러오는 것이다.

 

아래 소스는 특정 파일에서 모든 데이타를 numeric, string, fomula, null 로 구분 값을 찍는 소스이다...

 

주석은 없으니.... 알아서 살펴 보길 바라며

 

여기서 사용한 라이브러리는 "poi-bin-3.2-FINAL-20081019.tar.gz" 에 있는 jar파일 3개를 썼습니다.

 

이 소스에 대한 저작권은 저에게 있으며 저작권자의 허가 없이 상업적 용도로 사용시 저작권 침해로 소송을 걸수 있으니

 

상업적 이용에 대한 제한을 걸어둡니다. (단, 정보 습득과 자기 계발, 공부를 위한 사용이라면 누구나  소스 사용 가능 합니다.)

 

--- 소스내용 ----

import org.apache.poi.hssf.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.*;

 

public class TestFrame {
 public TestFrame() {
  
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println("Main start");
  TestFrame test = new TestFrame();
  test.process();
 }

 
 private void process() {
  try {
  
   POIFSFileSystem fs =
    new POIFSFileSystem(new FileInputStream("d://workbook.xls"));
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);
    int maxlow = sheet.getLastRowNum();
    System.out.println("max_row is " + maxlow);
  
    HSSFCell cell = null;
    HSSFRow row = null;
    
    for(int i=0; i<maxlow+1; i++) {
     row = sheet.getRow(i);
     int last_cell = 0;
     try {
      last_cell = row.getLastCellNum();
      System.out.println("last_cell is " + last_cell);
     } catch(NullPointerException nex) {
      
     }
     
     for(int j=0; j<last_cell; j++) {
      cell = row.getCell(j);
      int other = cell.getCellType();
      switch(other) {
       case HSSFCell.CELL_TYPE_BLANK : {
        System.out.print("  ");
       } break;
       
       case HSSFCell.CELL_TYPE_FORMULA : {
        System.out.print(cell.getCellFormula());
       } break;
       
       case HSSFCell.CELL_TYPE_NUMERIC : {
        System.out.print(cell.getNumericCellValue());
       } break;
       
       case HSSFCell.CELL_TYPE_STRING : {
        System.out.print(cell.getStringCellValue());
       } break;
      }
      System.out.print(" ");
     }
     System.out.println("");
    }
    
    System.out.println("5step");
    
    
  } catch(Exception ex) {
   ex.printStackTrace();
   
  }
 }


반응형
Posted by onlyTheOne
,
반응형
본글은 2007년 01월 07일에 네이버 블로그(본인 운영) 에 포스팅 한 글입니다.

지식인에 Button을 마우스 드래그 할때 마우스 따라 움직이게 하는 방법에 대해서

 

제가 올린 답변입니다. 질문자가 요청 한 만큼은 처리 못했네요...

 

내공 향상을 위해 오늘도 열공중입니다....

 

아래 소스 한번 참고 해 보세요.~~

 

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestButton extends JFrame {
 
  JPanel pan = new JPanel(); // 이벤트 등록용 패널

  // AWT의 Button으로도 가능
  JButton bu = new JButton("버튼");

  // 버튼의 기본 좌표용 변수
  int x = 10;
  int y = 10;
  int width = 80;
  int height = 20;
 
  // 버튼의 움직임 여부 결정용 변수
  boolean moves = false;
 
 
  public TestButton(){ // 생성자 디자인 및 이벤트 설정
    this.getContentPane().setLayout(new BorderLayout());
    pan.setLayout(null);
    bu.setBounds(x,y,width,height);
    pan.add(bu);
    this.getContentPane().add("Center", pan); 
    this.setSize(600,400);
    this.setVisible(true);
    bu.setFocusable(false);
   
    // 마우스 버튼을 놓았을경우 이동 가능 여부 false로 돌림
    pan.addMouseListener(new MouseAdapter() {
     public void mouseReleased(MouseEvent ev) {
      moves = false;
     }
    });
   
    // 배경 JPanel에 MouseMotionListener를 등록시켜 Drag때 처리하도록 함...
    pan.addMouseMotionListener(new MouseMotionAdapter() {
     public void mouseDragged(MouseEvent ev) {
      int tem_x = ev.getX(); // 이벤트 발생 좌표값중 x값 추출
      int tem_y = ev.getY(); // 이벤트 발생 좌표값중 y값 추출..

   
      /*System.out.println("버튼의 좌표 : " + bu.getX() + ", " + bu.getY());
      *System.out.println("버튼의 영역 : " + (bu.getX()+bu.getWidth()) + "," +
       * (bu.getY() + bu.getHeight()));
      *System.out.println("이벤트발생위치 : " + ev.getX() + ", " + ev.getY());
      * 버튼의 영역 안에 있으면 true로 설정...
     */

     if((tem_x >= bu.getX()) && (tem_x <= (bu.getX() + bu.getWidth()))) {
       
       if((tem_y > bu.getY()) && (tem_y <= (bu.getY() + bu.getHeight()))) {
        moves = true;
       }
      }
      // 마우스 포인터가 버튼 영역 안 여부 판단 후 버튼 위치 재지정...
      if(moves) {       
       bu.setBounds(tem_x-(width/2), tem_y-(height/2), width, height);
       
      }
     }
    });
  }
 
  public static void main(String [] args) {
    TestButton tb = new TestButton();
  }
}


반응형
Posted by onlyTheOne
,
반응형
본글은 2007년 05월 21일 제가 운영했던 네이버 블로그에 게제된 글을

다시 게제 합니다.

자바에서 웹 사이트 소스 보기라 하여

 

나와 있는 Tip 또는 강좌가 많이 있다.........

 

하지만.........

 

난 그 강좌들의 문제점을 발견하게 되어서 이렇게 글을 남기려 한다...

 

일반적으로 웹 사이트 소스 보기 Tip 이라 함은...

 

URL url = new URL("사이트주소");

BufferedReader br = null;

br = new BufferedReader(new InputStreamReader(aURL.openStream()));

 

즉... URL 객체에서 openStream 메소드를 이용하여 반환되는 값을 InputStreamReader로 받은뒤

다시 BufferedReader로 받아서...

 

아래와 같이 BufferedReader의 객체에서 readLine() 메소드를이용하여 한줄단위로 받아오게 된다...

String line = null;

while(br.readLine() != null) { 
    line = br.readLine();
    JTextArea.append("\n" + line);

}

 

그러나 여기에 눈에 보여지지 않았던 문제가 있었습니다.

 

바로 정확히 소스를 긁어 오는게 아닙니다.......... 제대로 다 못 받아옵니다....

 

못믿으시겠다면 소스보기를 통한 소스 내용과 비교해 보시기 바랍니다.

 

그래서 검색끝에 발견한 방법...

 

아래 소스를 참고 하길 바라며

 

간단히 설명하면

URL url = new URL("소스를 긁어오기위한 사이트주소");

URLConnection con = null;
   InputStream in = null;
   String header =null;
   con = url.openConnection();
   con.connect();
   in = con.getInputStream();
   StringBuffer sb = new StringBuffer();

   int i;
   while((i = in.read()) != -1) {
    sb.append(String.valueOf((char)i));
   }
   
   String temp2 = new String(sb.toString().getBytes("8859_1"),"KSC5601");
   source_area.setText(temp2);

 

즉 일일이 char로 받아오긴 하지만....... 다 불러들였습니다....

 

물론 개선한다면 더 좋은 방법으로 업데이트 할 수 있으리라봅니다.

 

이상.. 오랜만에 자바 Tip 적어 봅니다...


반응형
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
,
반응형

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

제작 환경은

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
,
반응형

eXtream에서 보여주지 않는것 즉... cache table에 대한 정보를 보여주기 위해만든 것으로

가상 HOST의 정보를 표기한다.

myTable.java

Queue가 구현되어 있으나 사용하지는 않는다.

//---------------------------------------------------------------------------------

/*
 * Author: TheOne
 * Created: 2004년 5월 8일 토요일 오후 8:41:20
 * Modified: 2004년 5월 8일 토요일 오후 8:41:20
 */

import! java.awt.*;
import! javax.swing.*;
import! javax.swing.table.*;
import! java.util.Vector;
import! java.util.LinkedList;

public class myTable extends JFrame {

  JScrollPane pane1 = new JScrollPane();
  String data[][] = new String[0][6];
  String col[] = {"State","Queue","Attemp","Time-out","Protocol Addr.","Hardware Addr."};
  DefaultTableModel model = new DefaultTableModel(data,col){
    public boolean isCellEditable(int row, int col) {
      return false;
    }
  };

  LinkedList que = new LinkedList();

  JTable table = new JTable(model);
  JLabel jLabel1 = new JLabel();
  JLabel jLabel2 = new JLabel();
  JLabel jLabel3 = new JLabel();
  JLabel jLabel4 = new JLabel();
  JTextField tf_ip = new JTextField();
  JTextField tf_mac = new JTextField();
  JButton bu_update = new JButton();

  myTable() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  private void jbInit() throws Exception {
    this.getContentPane().setBackground(Color.white);
    this.setResizable(false);
    this.setState(Frame.NORMAL);
    this.setTitle("Cache Table");
    this.getContentPane().setLayout(null);
    table.getColumnModel().getColumn(0).setPreferredWidth(38);
    table.getColumnModel().getColumn(1).setPreferredWidth(42);
    table.getColumnModel().getColumn(2).setPreferredWidth(50);
    table.getColumnModel().getColumn(3).setPreferredWidth(70);
    table.getColumnModel().getColumn(4).setPreferredWidth(100);
    table.getColumnModel().getColumn(5).setPreferredWidth(100);
    table.setSelectionMode(0);
    table.getTableHeader().setReorderingAllowed(false);
    table.getTableHeader().setBackground(new Color(235,211,200));
    pane1.setBounds(new Rectangle(16, 140, 375, 226));
    jLabel1.setBackground(new Color(212, 218, 217));
    jLabel1.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel1.setOpaque(true);
    jLabel1.setText("Computer 정보 : ");
    jLabel1.setBounds(new Rectangle(7, 9, 92, 23));
    jLabel2.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel2.setOpaque(false);
    jLabel2.setText("● IP Address : ");
    jLabel2.setBounds(new Rectangle(17, 40, 88, 22));
    jLabel3.setBounds(new Rectangle(17, 67, 99, 22));
    jLabel3.setText("● MAC Address : ");
    jLabel3.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel4.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel4.setText("● Cache Table 정보  ");
    jLabel4.setBounds(new Rectangle(15, 115, 122, 22));
    tf_ip.setFont(new java.awt.Font("SansSerif", 0, 12));
    tf_ip.setEditable(false);
    tf_ip.setText("");
    tf_ip.setBounds(new Rectangle(120, 40, 163, 22));
    tf_mac.setFont(new java.awt.Font("SansSerif", 0, 12));
    tf_mac.setEditable(false);
    tf_mac.setText("");
    tf_mac.setBounds(new Rectangle(120, 67, 163, 22));
    bu_update.setBackground(new Color(212, 208, 255));
    bu_update.setBounds(new Rectangle(290, 115, 100, 23));
    bu_update.setText("Update");
    this.getContentPane().add(pane1, null);
    this.getContentPane().add(jLabel2, null);
    this.getContentPane().add(jLabel3, null);
    this.getContentPane().add(jLabel1, null);
    this.getContentPane().add(jLabel4, null);
    this.getContentPane().add(tf_ip, null);
    this.getContentPane().add(tf_mac, null);
    this.getContentPane().add(bu_update, null);
    pane1.getViewport().add(table, null);
    this.setSize(new Dimension(421, 410));
    //this.setVisible(true);
  }

  // 자기 자신의 ip를 설정한다.
  public void set_IP(String ip) {
    tf_ip.setText(ip);
  }
  // 자기 자신의 mac을 설정한다.
  public void set_Mac(String mac) {
    tf_mac.setText(mac);
  }
  // 자기 자신의 ip를 반환한다.
  public String get_IP() {
    return tf_ip.getText();
  }
  // 자기 자신의 mac을 반환한다.
  public String get_mac() {
    return tf_mac.getText();
  }
 // table의 정보를 업데이트 하는 메소드(parameter을 4개 받을때)
  public void updateRow(String st, String at, String pi, String hi) {
    try {
    for(int k=0;k<table.getRowCount();k++) {
      if(pi.equals(model.getValueAt(k,4))) {
        model.setValueAt(st,k,0);
        model.setValueAt(at,k,2);
        model.setValueAt(hi,k,5);
      }
    }
  }catch(Exception ex) {
    System.out.println("ex : " + ex);
    }
  }
 // table의 정보를 업데이트 하는 메소드(parameter값을 2개 받을때)
  public void updateRow(String ip, String mac) {
    for(int i=0;i<table.getRowCount();i++) {
      if(ip.equals(model.getValueAt(i,4).toString())) {
        model.setValueAt(ip, i, 4);
        model.setValueAt(mac,i,5);
      }
    }
  }
  // table에 새로운 값을 저장하는 메소드
  public void addRow(String st, String qu, String at, String ti, String pi, String hi) {
    removeRow(pi); // 중복된 값을 제거 하기 위해서
    String temp[] = {st, qu, at, ti, pi, hi};
   model.addRow(temp);
  }
  // Table에 저장된 값을 삭제하는 메소드
  public void removeRow(String ip) {
    for(int i=0;i<model.getRowCount();i++) {
      if(ip.equals(model.getValueAt(i,4))) {
        model.removeRow(i);
      }
    }
  }
  // Pending인지 Resolved인지 값을 넘겨줌
  public String get_State(String ip) {
    String item = null;
    for(int i=0;i<model.getRowCount();i++) {
      if(ip.equals(model.getValueAt(i,4))) {
        item = model.getValueAt(i,0).toString();
      }
    }

    return item;
  }

  // ip값이 있는지 없는지 체크하는것
  public boolean isIpRow(String ip) {
    boolean tf = true;
    for(int i=0;i<model.getRowCount();i++) {
      if(ip.equals(model.getValueAt(i,4))) {
        tf = false;
      }
    }
    return tf;
  }
  // 큐에 item을 저장하는 메소드
  public void push_que(String item) {
    que.addFirst(new String(item));
  }

  // 큐에서 item을 빼는 메소드
  public String pop_que() {
    String temp = (String)que.getLast();
    return temp;
  }
}

반응형
Posted by onlyTheOne
,
반응형

myObject.java 파일에서 하는 일은...

IP를 요청받기 위한 GUI 화면을 보여주고

사용자로 부터 받아온 IP정보를 받아와서 eXtream.java 소스에 이동시켜주는 일을 한다.
//--------------------------------------------------------------------------------------

import java.awt.*;
import javax.swing.*;

public class myObject extends JFrame {
  JLabel jLabel1 = new JLabel();
  JLabel jLabel2 = new JLabel();
  JTextField tf_ip = new JTextField();
  JButton bu_ok = new JButton();
  JButton bu_cancel = new JButton();
  private int system = 0;

  myObject() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }

  }
  private void jbInit() throws Exception {
    jLabel1.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel1.setText("IP address :");
    jLabel1.setBounds(new Rectangle(13, 43, 78, 25));
    this.getContentPane().setBackground(new Color(215, 222, 217));
    this.setResizable(false);
    this.setTitle("ARP 요청처리");
    this.getContentPane().setLayout(null);
    jLabel2.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel2.setText("원하시는 컴퓨터의 IP를 입력하세요");
    jLabel2.setBounds(new Rectangle(13, 10, 205, 30));
    tf_ip.setText("");
    tf_ip.setBounds(new Rectangle(96, 43, 124, 25));
    bu_ok.setBounds(new Rectangle(96, 74, 62, 24));
    bu_ok.setFont(new java.awt.Font("SansSerif", 0, 12));
    bu_ok.setMaximumSize(new Dimension(57, 25));
    bu_ok.setMargin(new Insets(0, 0, 0, 0));
    bu_ok.setText("요청하기");
    bu_cancel.setBounds(new Rectangle(158, 74, 62, 24));
    bu_cancel.setFont(new java.awt.Font("SansSerif", 0, 12));
    bu_cancel.setMargin(new Insets(0, 0, 0, 0));
    bu_cancel.setText("취소하기");
    this.getContentPane().add(jLabel1, null);
    this.getContentPane().add(jLabel2, null);
    this.getContentPane().add(tf_ip, null);
    this.getContentPane().add(bu_ok, null);
    this.getContentPane().add(bu_cancel, null);
    this.setSize(240,140);
  }

  public void set_ProcessNum(int i) {
    system = i;
  }
  public int get_ProcessNum() {
    return system;
  }
}

반응형
Posted by onlyTheOne
,