반응형

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

인증 스크린샷 남깁니다. 

반응형
Posted by onlyTheOne
,
반응형

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

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

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

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

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

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

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

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

chatting_java_source_long_time_ago.zip
0.11MB

반응형
Posted by onlyTheOne
,
반응형

필자는 몇년전 학부 텀 프로젝트 과제로

라우팅 시뮬레이터를 구현 하기로 했었었다...

이때 만들다 말았다... 이제 새로 시작하는 마음으로

다시 시작 하려 한다...

(주의 사항 : 아래 내용이 아직 100% 맞는건 아니다.. 혹시나 잘못된 정보 일 경우 수정 할 수 도 있다)

그 첫번째...  RIP 관련 사항... 에 대해 이야기 해볼려고 한다.

RIP 란 무엇일까?
-> 위키 백과와 네이버 지식사전을 보면 Routing Information Protocol, UCP/IP(? TCP와 UDP는들어 봤는데 
    UCP는 먼지 모르겠다)상에서 동작하는 라우팅 규약 이다.
-> 경유할 가능성이 있는 라우터를 Hop 수로 수치화 하여, Distance Vector Algorithm(DVA)라는 알고리즘으로
    인접 호스트와의 경로를 동적으로 교환하는 일이다.
-> 현재 버전은 2가지가 있으며 버전 1은 Internet과 Intranet에서 이용되고 있다. 버전 2는 CIDR에 대응 할 수 있도록
    기능이 확장 되어 있다. 모두 LAN에 이용되는 경우가 많다. 
    => 참고자료 : http://terms.naver.com/entry.nhn?docId=849600 /  http://ko.wikipedia.org/wiki/%EB%9D%BC%EC%9A%B0%ED%8C%85_%EC%9D%B8%ED%8F%AC%EB%A9%94%EC%9D%B4%EC%85%98_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

- RIP에 이용되는 알고리즘은 Bellman-Ford algorithm 이다.
 -> 관련 링크 : http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm

- 자바로 RIP 시뮬레이터 돌리는 곳이 있다...
 -> 관련 링크 : http://pi4.informatik.uni-mannheim.de/pi4.data/content/animations/ripdvmrp/index.html

- 프린스턴 대학에 나온 정보
 -> http://algs4.cs.princeton.edu/44sp/

To be continue ... (보다 더 정리 하여 업데이트 하겠다..)
반응형
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
,
반응형
자바 언어를 요즘 안드로이드로 인해서 많이 이용 하고 있다.

물론 나도 자바라는 언어를 알고 지낸지 몇 년 되었다.

자바의 장점은... 한번 작성해서 어디서 든지 쓸 수 있다는 것이다.

그러나... 여기서 문제가 생길 수 있다.

대다수의 자바에 대해 알려주는 곳에서 이 주의 사항을 안 알려준다.

가장 큰 주의 사항은 다음 사항이다...

UTF-8.... 이걸 본다면 생각 나는게 있을 것이다.

바로 유니코드이다.

자바는 유니코드를 공식 지원한다. 벗뜨!!

소스 코드도 유니코드로 짜야지 100% 제대로 동작한다....

고로.... 반드시 소스 파일 작성은 유니코드로 해야 한다.

유니코드중 UTF-8로....

UTF-8로 인코딩 설정 할 수 있는 툴 중에 대표적인 툴에는

이클립스가 있다. 가장 좋다고 말할 수 있는 툴이다.!!! 최고의 툴이라 생각한다.


반응형
Posted by onlyTheOne
,
반응형
출처 : 2007년 06월 1일 주인장이 운영하고 있는 네이버 블로그
       (현재 해당 블로그 게시물은 모두 비공개 입니다.) 


아래는 원문 입니다.-----------------------------------------------------------------------------


오랜만에 Tip이랄거 까지는 없지만.......

JTable의 TableModel 구현 관련 부분입니다.... 

많은 분들이 JTable을 쓰고 싶으셔서 DefaultTableModel 이라는 클래스를 이용해서 쓰시는 걸로 압니다.

하지만 이 DefaultTableModel을 이용해서는 한계가 발생하게 됩니다.

책에서 본봐로는(무슨책인지는 기억이 안남)

자바 언어 개발쪽에서 DefaultTableModel 보다.. AbstractTableModel 이라는 추상클래스를 상속받아

구현해서 이용하는게 더 나은 성능이 발휘 된다고 합니다.

AbstractTableModel을 상속받을때는

아래와 같은 추상 메소드를 다 구현해 주어야 합니다.

  public int getRowCount();
  public int getColumnCount();
  public Object getValueAt(int row, int column);

Table의 Row 및 Column의 Count값과 각 Cell별 DATA를 반환해 주는 메소드 들 입니다.

저는 여기에 배열을 쓰는게 아니라 Vector를 사용하고 있습니다.

특정 DATA를 넣을수 있는 in-line Beans class를 제작한뒤...

그 class 객체를 Vector에 무한으로 넣을수 있게 유도 하는 방식을 취하였습니다.

자세한 사항은 이 다음 예제 소스를 통해 보여 드리도록 하겠습니다.

반응형
Posted by onlyTheOne
,
반응형

 2004년도 1학기 시스템 소프트웨어 과목의 Term 프로젝트로 제출했던 자료 입니다.

2007년 4월 27일 제가 운영하던 네이버 블로그에 공개 했던 소스 입니다.

자바로는 거의 제가 처음 제작 한 걸 껍니다. 아래 소스와 관련하여 예제 소스가 필요하신 분은

댓글이나 방명록에 이메일 주소를 남겨주시면 제가 보내드리겠습니다.

--------------------------------------------------------------------------
원문 :

오늘은 소스 코드 하나 올립니다.

학과 레포트로 제출한 프로그램 소스 코드 입니다.

어셈블리어 에서 사용하는 매크로 프로세서를

자바 언어로 한 겁니다.

어떤 매크로 들이 있는지 확인해 보고 매크로 확장 된 어셈블리 코드를 만들어 낼수도 있습니다.

아래 코드 참고 하시길..

예제를 위한 텍스트 파일과 소스 파일을 첨부합니다.

(첨부파일은 사용하실려면 파일명을 수정해 주세요)

 

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.StringTokenizer;

public class macroProcess extends JFrame implements ActionListener {
  JPanel jPanel1 = new JPanel();
  JPanel jPanel2 = new JPanel();
  JLabel jLabel1 = new JLabel();
  JLabel jLabel2 = new JLabel();
  JPanel jPanel3 = new JPanel();
  JPanel jPanel4 = new JPanel();
  JPanel jPanel5 = new JPanel();
  JPanel jPanel6 = new JPanel();
  JLabel jLabel3 = new JLabel();
  JLabel jLabel4 = new JLabel();
  JLabel jLabel5 = new JLabel();

  // 매크로 이름표를 위한 객체
  String list1[][] = new String[0][3];
  String cols1[] = {"색인(MNTC)","매크로이름","MDT색인(MDTC)"};
  DefaultTableModel mnt_model = new DefaultTableModel(list1,cols1){
      public boolean isCellEditable(int row, int col) { return false;}
  };
  // 형식인수표를 위한 객체
  String list2[][] = new String[0][2];
  String cols2[] = {"형식인수이름","색인번호"};
  DefaultTableModel hy_model = new DefaultTableModel(list2,cols2){
      public boolean isCellEditable(int row, int col) { return false;}
  };
  // 매크로 정의표를 위한 객체
  String list3[][] = new String[0][2];
  String cols3[] = {"색인(MDTC)","문장"};
  DefaultTableModel mdt_model = new DefaultTableModel(list3,cols3){
      public boolean isCellEditable(int row, int col) { return false;}
  };
  // 파일 오픈용
  JFileChooser jfc = new JFileChooser();
  // 파일 저장용
  FileDialog fd = new FileDialog(this,"확장된파일저장하기",FileDialog.SAVE);

  JScrollPane jScrollPane1 = new JScrollPane();
  JTable mnt_Table = new JTable(mnt_model);
  JScrollPane jScrollPane2 = new JScrollPane();
  JTable hy_Table = new JTable(hy_model);
  JScrollPane jScrollPane3 = new JScrollPane();
  JTable mdt_Table = new JTable(mdt_model);
  JTextField tf_file = new JTextField();
  JButton open_b = new JButton();
  JTextField tf_save = new JTextField();
  JButton save_b = new JButton();
  JButton exit_b = new JButton();
  JScrollPane jScrollPane4 = new JScrollPane();
  JTextArea sourArea = new JTextArea();
  JScrollPane jScrollPane5 = new JScrollPane();
  JTextArea destArea = new JTextArea();

  public macroProcess() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  public static void main(String[] args) {
    macroProcess macroProcess = new macroProcess();
  }
  // Design 구현
  private void jbInit() throws Exception {

    mnt_Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    mnt_Table.getColumnModel().getColumn(0).setMinWidth(70);
    mnt_Table.getColumnModel().getColumn(1).setMinWidth(129);
    mnt_Table.getColumnModel().getColumn(2).setMinWidth(94);
    mnt_Table.getColumnModel().getColumn(0).setMaxWidth(70);
    mnt_Table.getColumnModel().getColumn(1).setMaxWidth(129);
    mnt_Table.getColumnModel().getColumn(2).setMaxWidth(94);

    mdt_Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    mdt_Table.getColumnModel().getColumn(0).setMinWidth(70);
    mdt_Table.getColumnModel().getColumn(1).setMinWidth(225);
    mdt_Table.getColumnModel().getColumn(0).setMaxWidth(70);
    mdt_Table.getColumnModel().getColumn(1).setMaxWidth(225);

    this.getContentPane().setBackground(Color.lightGray);
    this.setResizable(false);
    this.setTitle("Macro Processer(java version, 제작자 : 김현수)");
    this.getContentPane().setLayout(null);
    jPanel1.setBackground(new Color(217, 249, 255));
    jPanel1.setBounds(new Rectangle(332, 9, 320, 285));
    jPanel1.setLayout(null);
    jPanel2.setBounds(new Rectangle(6, 9, 320, 285));
    jPanel2.setLayout(null);
    jPanel2.setBackground(new Color(217, 249, 255));
    jLabel1.setBackground(new Color(212, 208, 249));
    jLabel1.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel1.setOpaque(true);
    jLabel1.setText("원본파일 :");
    jLabel1.setBounds(new Rectangle(6, 6, 65, 24));
    jLabel2.setBounds(new Rectangle(5, 6, 65, 24));
    jLabel2.setText("출력파일 :");
    jLabel2.setOpaque(true);
    jLabel2.setBackground(new Color(212, 208, 249));
    jLabel2.setFont(new java.awt.Font("SansSerif", 0, 12));
    jPanel3.setBackground(new Color(203, 217, 223));
    jPanel3.setBounds(new Rectangle(6, 297, 646, 268));
    jPanel3.setLayout(null);
    jPanel4.setBackground(new Color(212, 208, 238));
    jPanel4.setBounds(new Rectangle(327, 10, 312, 251));
    jPanel4.setLayout(null);
    jPanel5.setBackground(new Color(212, 208, 238));
    jPanel5.setBounds(new Rectangle(6, 8, 313, 127));
    jPanel5.setLayout(null);
    jPanel6.setBackground(new Color(212, 208, 238));
    jPanel6.setBounds(new Rectangle(6, 146, 313, 115));
    jPanel6.setLayout(null);
    jLabel3.setBackground(Color.lightGray);
    jLabel3.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel3.setDoubleBuffered(false);
    jLabel3.setOpaque(true);
    jLabel3.setText("MNT(매크로이름표)");
    jLabel3.setBounds(new Rectangle(0, 0, 118, 21));
    jLabel4.setBounds(new Rectangle(0, 0, 118, 21));
    jLabel4.setText("형식인수표");
    jLabel4.setOpaque(true);
    jLabel4.setDoubleBuffered(false);
    jLabel4.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel4.setBackground(Color.lightGray);
    jLabel5.setBounds(new Rectangle(0, 0, 118, 21));
    jLabel5.setText("MDT(매크로정의표)");
    jLabel5.setOpaque(true);
    jLabel5.setDoubleBuffered(false);
    jLabel5.setFont(new java.awt.Font("SansSerif", 0, 12));
    jLabel5.setBackground(Color.lightGray);
    jScrollPane1.setBounds(new Rectangle(8, 26, 296, 94));
    jScrollPane2.setBounds(new Rectangle(9, 25, 295, 83));
    jScrollPane3.setBounds(new Rectangle(7, 25, 298, 218));
    tf_file.setEditable(false);
    tf_file.setText(" ");
    tf_file.setBounds(new Rectangle(113, 6, 131, 24));
    open_b.setBounds(new Rectangle(247, 6, 66, 24));
    open_b.setFont(new java.awt.Font("SansSerif", 0, 12));
    open_b.setText("Open");
    tf_save.setText("");
    tf_save.setBounds(new Rectangle(74, 6, 117, 24));
    save_b.setBounds(new Rectangle(195, 6, 57, 24));
    save_b.setFont(new java.awt.Font("SansSerif", 0, 12));
    save_b.setMargin(new Insets(0, 0, 0, 0));
    save_b.setText("Save");
    exit_b.setBounds(new Rectangle(253, 6, 60, 24));
    exit_b.setFont(new java.awt.Font("SansSerif", 0, 12));
    exit_b.setMargin(new Insets(0, 0, 0, 0));
    exit_b.setText("Exit");
    jScrollPane4.setBounds(new Rectangle(6, 34, 305, 240));
    sourArea.setText("");
    jScrollPane5.setBounds(new Rectangle(5, 34, 308, 241));
    destArea.setText("");
    this.getContentPane().add(jPanel2, null);
    jPanel2.add(jLabel1, null);
    this.getContentPane().add(jPanel1, null);
    jPanel1.add(jLabel2, null);
    this.getContentPane().add(jPanel3, null);
    jPanel3.add(jPanel4, null);
    jPanel4.add(jLabel5, null);
    jPanel3.add(jPanel5, null);
    jPanel5.add(jLabel3, null);
    jPanel3.add(jPanel6, null);
    jPanel6.add(jLabel4, null);
    jPanel5.add(jScrollPane1, null);
    jScrollPane1.getViewport().add(mnt_Table, null);
    jPanel6.add(jScrollPane2, null);
    jScrollPane2.getViewport().add(hy_Table, null);
    jPanel4.add(jScrollPane3, null);
    jScrollPane3.getViewport().add(mdt_Table, null);
    jPanel2.add(tf_file, null);
    jPanel2.add(open_b, null);
    jPanel2.add(jScrollPane4, null);
    jScrollPane4.getViewport().add(sourArea, null);
    jPanel1.add(tf_save, null);
    jPanel1.add(exit_b, null);
    jPanel1.add(save_b, null);
    jPanel1.add(jScrollPane5, null);
    jScrollPane5.getViewport().add(destArea, null);
    this.dispose();
    this.setSize(new Dimension(672, 600));
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    open_b.addActionListener(this);
    save_b.addActionListener(this);
    exit_b.addActionListener(this);
  }

  // Source 파일 열어 오기
  // 열어 오면 pass1 ~ pass2까지 진행된다
  private void open_File() {
    sourArea.setText("");
    mnt_model.setRowCount(0);
    hy_model.setRowCount(0);
    mdt_model.setRowCount(0);
    //jfc.setCurrentDirectory(".");
    // 파일을 불러 오는 구간
    if(jfc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) return;
    File file = jfc.getSelectedFile();
    tf_file.setText(file.getName());
    try {
      FileInputStream fis = new FileInputStream(file);
      int n;
      while((n = fis.available()) > 0) {
        byte[] b = new byte[n];
        int result = fis.read(b);
        if(result == -1) break;
        String s = new String(b);
        if(s.compareTo("MACRO") == 1) {
          String temp[] = {String.valueOf(mdt_model.getRowCount()+1),s};
          mdt_model.addRow(temp);
        }
        sourArea.append(s + "\n");
      }

    } catch(IOException ex) {}
 // pass1 부분...
    StringTokenizer st = new StringTokenizer(sourArea.getText(),"\n");
    boolean tf = false;
    boolean tf2 = false;

    while(st.hasMoreTokens()) {
      String tems = st.nextToken();
      if(tf == false) {
        for(int i = 0; i < tems.length() - 5; i++) {
          if(tems.substring(i, i + 5).equals("MACRO")) {
            set_hy(tems.substring(i+6)); //형식인수 저장
            set_name(tems.substring(0,i));// 매크로 이름 저장
            tf = true;
            tf2 = true;
            break;
          }
        }
      } else {
        String tem2 = tems;
        for(int i = 0; i < tems.length() - 4; i++) {
          if(tems.substring(i, i + 4).equals("ENDM")) { // end macro라면...
            String temp[] = {
                String.valueOf(mdt_model.getRowCount() + 1), tems};
            mdt_model.addRow(temp);
            tf = false;
            tf2 = false;
            break;
          }
        }
        if(tf2) { // end macro가 아니라면...
          set_define(tems);
        }
      }
    }
    pass2();
  }

  private void pass2() { // 패스2
    StringTokenizer st = new StringTokenizer(sourArea.getText(),"\n");
    String mymem = null;
    boolean tf = false;
    while(st.hasMoreTokens()) {
      mymem = st.nextToken();
      String tem3 = mymem.trim();

      if (tf == false) {
        if (tem3.length() > 5) {
          if (tem3.substring(0, 4).equals("MAIN")) {
            String tem4 = tem3.substring(5).trim();
            if (tem4.length() > 5) {
              if (tem4.substring(0, 7).equals("SEGMENT")) {
                destArea.append(mymem + "\n");
                tf = true;
                continue;
              }
            }
          }
        }
      } else {
        for(int i=0;i<mnt_model.getRowCount();i++) {
          if(tem3.length() >= mnt_model.getValueAt(i,1).toString().length()) {
            String tem5 = mnt_model.getValueAt(i,1).toString().trim();
            if(tem5.equals(tem3.substring(0,tem5.length()))) {
              go_macro(tem5,tem3);
              mymem = st.nextToken();
            }
          }
        }

        if(tem3.length() > 4) {
          if(!tem3.substring(0, 4).equals("MAIN")) {
            String tem6 = tem3.trim();
            if(tem6.equals("ENDM")) {
              mymem = st.nextToken();
            }
            destArea.append(mymem + "\n");
          } else {
            destArea.append(mymem + "\n");
          }
        }
        if(tem3.equals("END")) {
          destArea.append(mymem + "\n");
        }
      }

    } // end of while
  } // end of method

  private void go_macro(String name, String temp) { // 명령어가 매크로라면...
    String tem1 = temp.substring(name.length()).trim();
    StringTokenizer st = new StringTokenizer(tem1,",");
    int num = 1;
    for(int i=0;i<mnt_model.getRowCount();i++) {
      if(name.equals(mnt_model.getValueAt(i,1).toString())) {
        num = Integer.parseInt(mnt_model.getValueAt(i,2).toString());
        break;
      }
    }
    String tem3 = null;
    for(int j=num-1;j<mdt_model.getRowCount();j++) {
      tem3 = mdt_model.getValueAt(j,1).toString().trim();
      if(!tem3.equals("ENDM")) {
        String msg = tem3.substring(0,tem3.indexOf(","));
        msg += ", " + st.nextToken();
        destArea.append(msg + "\n");
      } else {

        break;
      }
    }
  }

  private void set_name(String temp) { // 매크로 이름표 제작
    for(int i=0;i<temp.length();i++) {
      if(temp.charAt(i) == ' ') {
        String cou = String.valueOf(mnt_model.getRowCount() + 1);
        String tem[] = {cou,temp.substring(0,i).trim(),
            String.valueOf(mdt_model.getRowCount() + 1)};
        mnt_model.addRow(tem);
        break;
      }
    }
  }

  private void set_hy(String temp) { //형식 인수표 제작
    StringTokenizer st = new StringTokenizer(temp,",");
    while(st.hasMoreTokens()) {
      String cou = "#" + String.valueOf(hy_model.getRowCount() + 1);
      String tem[] = {st.nextToken().trim(),cou};
      hy_model.addRow(tem);
    }
  }

  private void set_define(String temp) { //매크로 정의표 만들기...
    StringTokenizer st = new StringTokenizer(temp,",");
    String tem1 = st.nextToken();
    String tem2 = st.nextToken();
    for(int i=0;i<hy_model.getRowCount();i++) {
      String tem3 = tem2.trim();
      String out = hy_model.getValueAt(i,0).toString();
      if(out.equals(tem3)) {
          tem2 = hy_model.getValueAt(i,1).toString();
          String tem[] = {String.valueOf(mdt_model.getRowCount() + 1), tem1+", "+tem2};
          mdt_model.addRow(tem);
      }
    }
  }

  public void save_File() { // 확장된 소스코드 저장하기.
    //if(jfc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) return;
    if(tf_save.getText() == null) {
      tf_save.setText("result.asm");
    }
    fd.setFile(tf_save.getText());
            fd.show();
            String str = fd.getDirectory() + fd.getFile();
            File file = new File(str);
            try {
                FileWriter fw  = new FileWriter(file);
                BufferedWriter bw = new BufferedWriter(fw);
                StringTokenizer st2 = new StringTokenizer(destArea.getText()+"\nend","\n");
                while(true) {
                    str = st2.nextToken();
                    if(str.equals("end"))
                        break;
                    bw.write(str);
                    bw.newLine();
                }
                bw.close();
              }catch(Exception e){}


  }

  public void actionPerformed(ActionEvent ev) { // 이벤트 명령 처리
    Object ob = ev.getSource();
    if(ob == open_b) {
      open_File();
    }
    if(ob == save_b) {
      save_File();
    }
    if(ob == exit_b) {
      System.exit(0);
    }

  }
}

반응형
Posted by onlyTheOne
,
반응형

2007년 5월 3일 네이버 블로그에 올려 두었던 소스  입니다.

네이버에서 이곳으로 이사 하느라 그대로 글을 가져 오느라 내용이 이상한 점이 있더라도

이해 부탁드립니다.

------------------------------------------------------
요즘 내가 만들고 있는 프로그램의 소스 이다.. 

웹 브라우져를 만들고 있는데 이건 도무지...

머랄까 일반 웹브라우져처럼 표기를 못해준다 ㅠ.ㅠ

머리 굴려 보고 있긴 한데... CSS 처리를 안해서 그런가..

암튼 기필고 브라우져 만들어 본다!!

아래 소스를 붙여 놓는다.. 코멘트는 없다~~~

왜냐고... 저소스도 간신히 살렸다...

코딩하다가 컴 따운 되서 리붓 되었더니 소스 날라가 버렸다 ㅠ.ㅠ

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.event.*;

public class m_Frame extends JFrame implements ActionListener, HyperlinkListener {
  
 public m_Frame() {
  set_Design();
 }
 JButton test = new JButton("나누어 보기");
 JTextField tf_url = new JTextField();
 
 JEditorPane paneArea = new JEditorPane();
 JTextArea paneArea2 = new JTextArea();
 EditorKit htmlKit = paneArea.getEditorKitForContentType("text/html");
 HTMLDocument doc = (HTMLDocument)htmlKit.createDefaultDocument();
 JScrollPane s_pan = new JScrollPane(paneArea2);
    JScrollPane s_pan2 = new JScrollPane(paneArea);
   
     private void set_Design() {
  Container con = this.getContentPane();
  con.setLayout(null);
  this.setTitle("Super");
  paneArea.setEditorKit(htmlKit);
  tf_url.setBounds(10,10,380,20);
  test.setBounds(400, 10, 80, 20);
 
   
  paneArea.setPreferredSize(new Dimension(700, 400));
  /*paneArea.setContentType("text/html");
  htmlKit = new HTMLEditorKit();
  paneArea.setEditorKit(htmlKit);
  StyleSheet ssh = htmlKit.getStyleSheet();
  doc = new HTMLDocument();*/
  //paneArea.setDocument(doc);
  //paneArea.addHyperlinkListener(listener);
  paneArea.setEditable(false);
  /* 이곳은 어느분의 소스에서 긁어 온 부분이라 주석 처리로 돌려 놓았다..
  helpContent = new JEditorPane("text/html", "");
        HTMLEditorKit kit = new HTMLEditorKit();
        helpContent.setEditorKit(kit);
        StyleSheet ssh = kit.getStyleSheet();
        ssh.addRule(".menuitem { font-family: Verdana;  } ");
        ssh.addRule(".menuitem { font-weight: bold;  } ");
        ssh.addRule(".menuitem { color: #003399;  } ");
        */
  s_pan2.setBounds(10,40,800,330);
  s_pan.setBounds(10,400,700,200);
  //s_pan2.add(paneArea);
  try {
   UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
  } catch(Exception ex) {
   
  }
  
  this.add(tf_url);
  this.add(test);
  //this.add(span);
  this.add(s_pan2);
  this.add(s_pan);
  this.setSize(900,620);
  this.setLocation(100, 100);
  test.addActionListener(this);
  paneArea.addHyperlinkListener(this);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 public void hyperlinkUpdate(HyperlinkEvent ev) {
  if(ev.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
   try {
    paneArea.setPage(ev.getURL());
   } catch(Exception ex) {}
  }
 }
 public void actionPerformed(ActionEvent ev) {
  Object ob = ev.getSource();
  if(ob == test) {
   String url = tf_url.getText();
   show_Tag(url);
  }
 }
 
 private void show_Tag(String url) {
  try {
   URL aURL = new URL(url);
   BufferedReader br = new BufferedReader(new InputStreamReader(aURL.openStream()));
   String line = null;
   int co = 0;
   String sb = "javascript:show_id_layer(this,'";//   ','
   String temp = null;
   String u_id = null;
   //doc.setBase(aURL);
   paneArea.validate();
   paneArea.updateUI();
   //paneArea.setPage(aURL);
   InputStream in = aURL.openStream();
   paneArea.read(in, doc);
   System.out.println(aURL.getContent());
   //while(br.readLine() != null) { 
   // line = br.readLine();
   // paneArea2.append("\n" + line);
    
    
    //co = line.indexOf(sb);
    
    /*if(co > 1) {
     temp = line.substring(co+31);
     u_id = temp.substring(0, temp.indexOf("'"));
     ta.append("u_id = " + u_id+"\n");
     
    }*/
   //}
  } catch(MalformedURLException e) {
    
  } catch(IOException e) {
    
  } catch(Exception ex) {
   ex.printStackTrace();
   
  }
 }

반응형
Posted by onlyTheOne
,