레이블이 JAVA SWING인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JAVA SWING인 게시물을 표시합니다. 모든 게시물 표시

2013년 8월 10일 토요일

Raw/Long Raw Type에 관하여

Oracle LongRaw 데이터 타입에 관하여

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



1. 이진 Data또는 Byte문자열을 위한것

2. RAW및 LONG RAW는 Data전송시 인스턴스에 사용자 세션을 접속하는 SQL*Net과
Inport/Export Utility가 문자변환을 수행하지 않는다는 점을 제외하면 Varchar2 Data
Type과 같은 가변길이 Data 유형이다.

3. Oracle이 RAW나 LONG RAW를 CHAR로 상호 변환하는 경우 한 문자에 4bit가 해당되는
16진수 형태로 표현된다.(11001011 은 'CB')

4.  Long Raw는 Index될수 없으나 Raw는 Index 될수있다.

--------------------------
자바에서 LongRaw 예
--------------------------
1. 읽을때(detail이란 컬럼이 longraw 입니다.)

try{
            InputStream vIcode        =null;
            BufferedReader vvcode    =null;

            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(" select name,title,detail,re_id,ip,count,to_char(ilsi,'dd/MON/yyyy(hh:mi)'),path,e_mail,root_id,depth  from db_board where id = "+szID);
            rs.next();
            szName = rs.getString(1);
            szTitle = rs.getString(2);
           
            szDetail= hangul.han(new String(rs.getBytes(3),0));           
            szRe_Id = rs.getString(4);
            szIp = rs.getString(5);
            iCount = rs.getInt(6);
            szIlsi = rs.getString(7);
            szPath = rs.getString(8);
            szE_mail = rs.getString(9);
            szRoot_Id = rs.getString(10);
            szDepth = rs.getString(11);
            iCount++;
            rs.close();
            stmt.executeUpdate(" update db_board set count=count+1 where id = "+szID);
            stmt.close();
   
      }

2. 저장하는 예

PreparedStatement ps = con.prepareStatement("insert into db_board(id,re_id,name,title,detail,passwd,count,ip,ilsi,e_mail,is_re,board_gbn,path,root_id,depth) values (?,0,?,?,?,?,0,?,sysdate,?,'N',?,?,?,0)");

          ps.setInt(1,iId);
          ps.setString(2,hangul.han(szName));
          ps.setString(3,hangul.han(szTitle));

//////////////////////////////////////////////////////////////////////////
          StringBuffer szbWriteDetail = new StringBuffer();
          for( int i = 0,len=szDetail.length() ; i < len ; i++){
              if( szDetail.charAt(i) == ' ')
                  szbWriteDetail.append(" ");
              else if( szDetail.charAt(i) == '<')
                  szbWriteDetail.append("<");
              else if( szDetail.charAt(i) == '>')
                  szbWriteDetail.append(">");
              else if( szDetail.charAt(i) == '\n')
                  szbWriteDetail.append("<br>");
              else
                  szbWriteDetail.append(szDetail.charAt(i));
          }
////////////////////////////////////////////////////////////////////////////

          StringBufferInputStream abc = new  StringBufferInputStream(szbWriteDetail.toString());
          ps.setBinaryStream(4,abc,szbWriteDetail.length());
          ps.setString(5,szPasswd);
          ps.setString(6,szIp);
          ps.setString(7,szE_mail);
          ps.setString(8,szBoard_Gbn);
          ps.setString(9,szPath);
          ps.setInt(10,iId);

          ps.executeUpdate( );

2013년 8월 9일 금요일

[OracleJavaCommunity,오라클자바커뮤니티]이번 강좌에서는 자바에서의 main 메소드에 대해 자세히 알아 보도록 하겠습니다

이번 강좌에서는 자바에서의 main 메소드에 대해 자세히 알아 보도록 하겠습니다. main 앞에 왜 static이 붙으며 왜 public이 붙는지등에 관한 것을 공부해 보도록 하겠습니다. 잘 알아두시기 바랍니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



main 메소드의 특징 

메인 메소드는 JVM에 의해 자바 프로그램을 실행 할 때 처음 호출되는 메소드 입니다.
메인 메소드는 객체 생성을 위한 첫 실행 메소드 이다. 그러므로 어느 클래스에서 접근이 가능해야 하므로 public 이라는 접근 제어자를 사용 합니다.
해당 클래스로 부터 생성된 모든 객체에서 접근이 가능해야 한다. (static) --> static이라는 말이 붙으면 객체와 관련이 있는 것이 아니라 클래스와 관련이 있으며 초기화가 한번만 일어나며, 클래스가 실행되기 위해 메모리로 로딩되는 시점에 한번만 초기화가 일어 납니다. 즉 전역변수등에 사용되며...등등 [자바기초다지기#7]변수-인스턴스변수, 클래스변수 강좌에서 이미 공부 했던 부분 입니다.
Return 값을 가지지 않습니다.(void)
또한 실행 될 때 인자 값을 받아 들일 수 있습니다.

자바 인터프리터는 Java Application에 주어지는 각 명령형 인자들을 main(String[] args) 메소드에 매개변수로 넘겨 줍니다.
각 명령행 인자는 공백문자(whitespace)로 구분 하며, C/C++에서 메인 함수의 매개변수 개수를 나타내는 argc와 명령형 매개 변수 들을 문자열 배열로 받아 들이는 argv는 결국 Java의 args.length, args로 대체 될 수 있습니다.

[예제]

class ArgTest
{
public static void main (String[] args)
{
for(int i = 0; i < args.length; ++i) //이 프로그램을 실행할때 넘어 오는 아규멘트의 갯수 만큼 루프를 돕니다. >
System.out.println( "args[" + i + "] = " + args[i] );
}
}



[결과1]

java ArgTest test 100 이라고 실행시

args[0] = test
args[1] = 100


[결과2]

java ArgTest "test 100" 이라고 실행시

args[0] = test 100

(java array)자바에서의 배열에 대해 알아 보기로 하겠습니다. ORACLEJAVANEW.KR

자바에서의 배열에 대해 알아 보기로 하겠습니다.  자바에서의 배열을 잘 공부해 두시면 닷넷등에서도 비슷하게 사용 되니 닷넷을 공부 할때 도움이 되실 겁니다.  열공!!


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


 

배열이란? 배열도 객체 이며 ,,, 그래서 Memory Heap에 메모리가 할당 됩니다. 동일한 자료형을 갖는 자료의 배열이며, 배열 선언은 선언할때 크기 명시 안 한다는곳 기억 하시구요..

int[] a; ( 혹은 int a[];)

배열에 Access 하기 위한 첨자는 int 형 이며 long 인 경우에는 Type Casting을 해야 합니다.

배열 생성
a = new int[3];
int[] a = {1, 2, 3};
int[] a; a = new int[] {1, 2, 3};

배열 길이
a.length

배열의 재사용
int[] a = {1, 2, 3};
a = new int[50]; //이때 이전의 배열a의 내용은 버려지며 새로운 메모리 공간이 할당 됩니다.

[예제]

class ArrayTest {
public static void main( String[] args ) {
int[] a = {1, 2, 3}; // int형 배열 선언 및 값 할당
int a2[]; // int형 배열 선언
a2 = new int[] {7, 8, 9, 10, 11}; // 이름 없는 배열 생성
System.arraycopy(a, 0, a2, 3, 2); //배열을 복사(a라는 배열의 0번째를 a2라는 배열의 3번째 인덱스 부터
//2개 복사하라는 의미 입니다. a2는 7,8,9,1,2가 되겟네요...
System.out.println( a.length ); // 3
for(int i = 0; i < a.length; ++i) >
System.out.print( a[i] + " "); // array

// 스트링 객체의 참조값의 배열 생성
String[] as = { "i", "am", "boy", };
String[] as2 = { "me", "to", };

System.out.println("\n" + as.length ); // 3
for(int i = 0; i < as.length; ++i) >
System.out.print( as[i] + " "); //i am boy

as = as2;

System.out.println("\n" + as.length ); // 2
for(int i = 0; i < as.length; ++i) >
System.out.print( as[i] + " " ); //me to
as2 = null;
}
}


[결과]
3
1 2 3
3
i am boy
2
me to



배열의 배열 ( 다차원 배열 ) 

배열은 또 다른 배열을 포함 할 수 있으며 하위 배열은 모두 다른 크기를 가질 수 있습니다. 이를 자바에서는 배열의배열의 형태로 다룰 수 있습니다. 예를들면 1행은 열이 2개, 2행은 열이 3개,,, 이런게 가능하다는 이야기죠^^;;;

[예제]

class MultiArrays {
public static void main(String[] args) {
String[][] 자동차 = {
{"그랜져","소나타","아반테"},
{"매그너스","누비라"},
{"카니발","세피아"}
};

for(int i=0; i<자동차.length; i++) { >
System.out.print(자동차[i].length + ":");
for(int j=0; j<자동차[i].length; j++) { >
System.out.print(자동차[i][j] + " ");
}
System.out.print("\n");
//System.out.println();
}
}
}


[결과]
3:그랜져 소나타 아반테
2:매그너스 누비라
2:카니발 세피아




배열의 예외 

NegativeArraySizeException : 음수크기를 갖는 배열 객체를 만들고자 할때 발생 합니다.
ArrayStoreException : 배열의 자료형과 틀린 자료값을 저장 할려고 하는 경우에 발생 합니다. 예를들면 int형 배열을 선언하고 3.3 이라는 값등을 넣을때 나는 오류 입니다.
ArrayIndexOutOfBoundsException : 배열의 첨자 범위를 벗어 났을때 발생 합니다. A라는 배열을 방2개짜리로 만들면 인덱스는 0, 1을 가질수 있는데 A[2]라는 형태로 사용하는 경우 나는 오류 입니다.
NullPointException : null 값을 갖는 배열 객체 참조 변수를 참조하려고 할때 발생 합니다.

2013년 8월 8일 목요일

[ORACLEJAVA커뮤니티]struts-config.xml이나 메시지 리소스 파일을 수정 후 웹서버를 Restart하지 않고 변경사항을 반영하는 방법

struts-config.xml이나 메시지 리소스 파일을 수정 후 웹서버를 Restart하지 않고 변경사항을 반영하는 방법 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


1.        새로운 ActionServlet을 하나 만듭니다.

package yfarm;

import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import org.apache.struts.action.ActionServlet;
import java.io.IOException;

//struts-config.xml과 메시지 Resource 파일을 수정 했을 때 자동으로 인식할 수 있게...
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.config.ModuleConfig;
import org.apache.struts.util.RequestUtils;

public class NewActionServlet extends ActionServlet {
       
    protected void Process (HttpServletRequest request, HttpServletResponse response)
                                  throws IOException, ServletException {
        String uri = request.getRequestURI();
       
        if(uri.indexOf("reload.do") != -1) {
            init();
           
            RequestUtils.selectModule(request, getServletContext());
           
            ModuleConfig config = getModuleConfig(request);
           
            getRequestProcessor(config).init(this, config);
           
            RequestDispatcher dispatcher = request.getRequestDispatcher("/reload.jsp");
           
            dispatcher.forward(request, response);           
        }
        else {
            super.process(request, response);
        }
    }
}
                       
위의 NewActionServlet은 URL에 reload.do가 포함되어 있는 경우 초기화를 수행 하도록 합니다. 초기화는 두 단계로 진행하는데 첫째 ActionServlet의 init() 호출하여 struts-config.xml을 초기화 하며 둘째 RequestProcessor 클래스를 초기화 합니다. RequestProcessor 클래스가 초기화 되지 않으면 struts-config.xml이 수정되기 전에 사용된 Action 클래스들이 재사용 되므로 수정된 내용이 반영되지 않을 수도 있습니다.

2.        web.xml을 수정 합니다.
(사용자의 요청을 NewActionServlet이 수행하도록 수정 합니다.)

<servlet>
                <servlet-name>action</servlet-name>
                <servlet-class>yfarm.NewActionServlet</servlet-class>
                <init-param>
                        <param-name>config</param-name>
                        <param-value>/WEB-INF/struts-config.xml</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>               
        </servlet>

3.        ReloadStrutsConfigAction 클래스를 만듭니다. ( 이 클래스가 reload action인 reload.do에 대해 대응을 하는데 아무 일도 하지 않습니다.)

/*
 * Created on 2005. 5. 6.
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package oraclejava;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 이종철
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

public class ReloadAction extends Action {
    public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest  request,
        HttpServletResponse response) throws Exception {
        return null;     
    }
}

4.        struts-config.xml에 아래를 추가 합니다. (action-mappings에 추가)

<action
            path="/reload"
            type="oraclejava.ReloadAction"   
    />


5.        XML파일이나 메시지 리소스 등을 수정 후 URL에서 /reload.do를 불러주면 웹 서버를 재시작 하지 않더라도 수정 사항이 반영 됩니다.

2013년 8월 5일 월요일

(자바 스윙, 자바오라클교육,ORACLE)JAVA SWING JFC

JFC(Java Foundation Class)


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 


 www.onjprogramming.co.kr 


그래픽 사용자 인터페이스의 구현을 위한 일련의 기능요소를 묶은것으로 다음과 같은 요소가 포함 됩니다.
- 스윙컴포넌트(Swing Component)
- 교체 가능한 외양(Pluggable look & feel) 지원 GUI의 겉모습과 작동방식을 자유롭게 선택 교체할수 있게함 , 예를들면 같은 프로그램을 java look&feel로 또는 window look&feel로 나타내도록 할 수 있습니다.
- 접근지원 API 화면의 내용을 음성으로 읽어 주거나 점자로 출력하는등의 장애자용 인터페이스에 관련된 기능
- Java 2D API 고품질의 2D 그래픽, 텍스트, 이미지를 Appication이나 Applet등에서 쉽게 사용가능 - 드래그&드롭 지원 자바 어플리케이션과 운영체제 고유의 어플리케이션 사이에서 끌어놓기를 지원 합니다.



자바 스윙(Swing) 이란...
자바나 C++, C#등 보게 되면 처음에는 Helloworld 부터 컨솔화면에 찍기 시작하여 나중에는 멋진 윈도우 화면에 무언가 다이나믹한것을 만들게 됩니다. 어느정도 console 창(도스 창)에서 작성하는 프로그래밍에 숙련되면, GUI(graphic user interface)를 통해 작동하는 프로그램을 짜게 된다는 거죠~ 기본적으로 자바는 AWT(abstract window toolkit)라는 것을 제공하여 윈도우 프로그램을 개발 하게 했지만 무거우며 플랫폼나자 다른 형태로 나타나는 등의 단점이 있어 아마도 JDK1.2 이상에서 Swing이라는 것을 지원하기 시작 했습니다. 자바 프로그램에서 Swing을 이용하여 윈도우 프로그램을 개발할려면 import javax.swing.*; 형태로 사용 합니다. 또한 스윙 컴포넌트는 앞에 'J'를 붙입니다. 즉 기존 AWT에서 제공 되었던 컴포넌트와 구분하기 위해서 입니다.

스윙 Component와 AWT Component의 차이점
- 스윙 컴포넌트는 ‘ J ' 로 시작한다.(Button, JButtion)
- AWT컴포넌트는 java.awt 패키지안에, Swing 컴포넌트는 javax.swing 패키지 내에 존재 합니다.
- 모든 스윙 컴포넌트는 javax.swing.Jcomponent를 상속 합니다.
- 스윙 컴포넌트는 특정 플랫폼에 의존적인 코드가 전혀 포함되지 않고 구현됨 즉, 그들이 수행될 때 플랫폼으 로부터 어떠한 native code도 가져다 쓰지 않습니다.
- 스윙의 버튼은 텍스트뿐만 아니라 이미지도 표시 할 수 있습니다.
- 스윙 컴포넌트는 직사각형 이외의 모양도 가능 합니다.(둥근버튼)
- 프로그램 내에서 스윙컴포넌트와 중량(heavy weight) 컴포넌트를 사용하면 안된다. 즉시 사용가능한 AWT 컴포넌트나 AWT Canvas, Panel을 상속한 클래스는 중량컴포넌트이다. 경량과 중량이 곁쳐지는 경우에는 경량컴포넌트가 가려지기 때문이다.
- JFrame와 같은 최상위 컨테이너에 직접 컴포넌트를 추가하지 않습니다. 그대신 Jframe에 포함된 다른 컨테이너에 컴포넌트를 추가 하는 겁니다.(Panel등)
- 스윙에서는 Border를 그맇수 있습니다. AWT는 Peer를 거치므로 모양에 관여할수 없었지만, 스윙은 직접 그리 는것을 담당하므로 Border를 쉽게 그릴수 있습니다.
- 컴포넌트의 최대/최소 크기와 가장 적절한 크기를 지정 할 수 있습니다. AWT에서는 Peer에 의해 제어되므로 마 음대로 크기를 제어하기가 어렵습니다
- ToolTip을 만들기가 쉽습니다.(Jcomponent에 ToolTip에 대한 메소드가 존재)
- 투명한 Component가 가능(setOpaque() 이용하여 설정가능)
- Jframe은 윈도우 이벤트 핸들링을 하지 않아도 윈도우를 종료할수가 있다. 이는 내부적으로 이벤트 핸들링 코드가 존재하기 때문인데 프로그래머가 바꿀수 있도록 설정이 가능합니다. setDefaultCloseOperation(int) 이 라는 메소드를 이용 합니다. 파마미터로 java.swing.WindowConstants의 DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE,DISPOSE_ON_CLOSE 값을 이용할수 있으며 DISPOSE_ON_CLOSE가 기본값 입니다.

스윙의 특징
- 교체 가능한 외관(look & feel) --> look & feel이 동작도중에 동적으로 교체가 가능 합니다.. 자바의 확실한 멀티플랫폼 지원의 일부 현재 Window, java, Motif 세가지 외관이 지원 됩니다.
- MVC(Model View Controller) 모델 --> MVC 구조는 Alan Kay라는 사람이 만든 객체 지향 언어인 Smalltalk-80 version에서 소개 컴포넌트 디자인 모델의 하나로 각각의 컴포넌트를 Model, View, Controler로 구분하여 추상화 한것이며 ① 모델(Model) : 프로그램의 상태에 대한 논리적인 데이터를 표현, 또한 모델의 데이터가 변경되었을 경우 이를 뷰 객체에게 알려주는 역할을 하는 객체 입니다. ② 뷰(View) : 모델에 의해서 표현된 데이터에 대한 시각적인 화면 출력을 관리하는 객체 입니다. 뷰는 응답 메커니즘을 기술하기 위하여 콘트롤러를 이용 하는거죠 즉, 콘트롤러의 입력에 응답하여 그 결과를 화면으로 출력해 주는ㄴ것 입니다. ③ 콘트롤러(Controller) : 모델에 의해서 표현된 데이터를 사용자가 변경할 수 있도록 사용자 상호작용(User Interaction)을 제공하는 객체 입니다. JFC의 Swing에서의 MVC의 구조는 상태부분(Model)과 표현부분(View+Controller=UI)으로 구분함으로써 다음과 같은 특징을 갖는것 입니다.
- 같은 모델을 가지고 쉽게 동시에 여러 개의 뷰를 만들 수 있습니다.
- 모델에는 표현부분이 없기 때문에 모델의 영향을 주지 않고 필요에 따라 뷰를 자유롭게 수정할 수 있습니다.
- Swing 일반적인 MVC 구조에서 공통적으로 약간 변형시킨 형태로 컴포넌트를 표현 합니다. 즉, 뷰와 콘 트롤러를 하나로 묶어서 델리게이트라는 커다란 컴포넌트를 형성,모델은 바꾸지 않고 프로그램 실행 중 간에 Delegate(view+Controller)를 통해 Java Look&feel을 윈도우 look&feel로 바꿀 수가 있는 것입니다.
- 경량 컴포넌트(lightweight Component) : 시스템의 Native Component와 연계되지않은 컴포넌트, 반대로 AWT의 모든 컴포넌트는 Peer라는것을 통하여 시스템의 Native Component와 연계되어 있습니다. Native Component를 사용하지 않으므로 자원을 적게 소모하며 플랫폼에 독립적인 컴포넌트를 만들수 있는 것 입니다. 스윙 컴포넌트는 경량 컴포넌트라 말할 수 있습니다. 그렇다고 스윙 컴포넌트가 모두 경량 컴포넌 트라는 말은 아닙니다. 경량 컴포넌트는 완전히 Java 만으로 작성되어야 하고, 사용자가 임의로 룩앤필 을 바꿀 수 있는 것이라야 합니다 .
- 중량 컴포넌트란 그 플랫폼이 제공하는 컴포넌트로 사용자가 변화를 모색할 수 없는 매우 경직된 컴포넌트, AWT 컴포넌트는 중량형 컴포넌트 입니다.
- 스윙은 모든 플랫폼에서 동일한 외형을 갖고, 동일한 작동을 하며, 최대한 유연성을 갖는 완전히 Java 만으로 작성된 "경량형lightweight" 컴포넌트를 제공한다는 목적으로 시작된것 입니다.
아래는 간단한 스윙 예제 입니다.
[예제]
// HelloSwing.java
// JMEnuBar를 제외하고 나머지(JButton, LayoutManger등)을 JFrame에 추가할때 contentPane에 추가
// JFrame의 경우 윈도우 이벤트를 처리하지 않아도 윈도우는 종료되지만 프로그램이 종료되지는 않는다.
import java.awt.*; import java.awt.event.*; import javax.swing.*;
class HelloSwing extends JFrame {
public HelloSwing(String title) {
super(title);
display();
}
public void display() {
Container cpane;
JMenuBar mb = new JMenuBar();
JMenu menu;
menu = new JMenu("File");
menu.add(new JMenuItem("Open"));
menu.add(new JMenuItem("Save"));

menu.addSeparator();
menu.add(new JMenuItem("Exit"));
mb.add(menu);
setJMenuBar(mb);
cpane = getContentPane();
cpane.setLayout(new BorderLayout());
cpane.add(new JButton("안녕, 스윙"),BorderLayout.CENTER);
}
public static void main(String[] args) {
HelloSwing hs = new HelloSwing("수윙 시작... 시작이 반이다.");
hs.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
);
hs.pack(); hs.setSize(300, 200); hs.setVisible(true);
}
}




(자바스윈, 오라클자바교육, ORACLEJAVA EDU)JAVA Swing이란

이번 강좌에서는 전강좌에 이어 스윙에 대해 살펴 보도록 하겠습니다.



오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 

 www.onjprogramming.co.kr




컴포넌트와 컨테이너

Container로 부터 파생된 클래스는 다른 Component를 담을수 있으며, 컨테이너라고 부릅니다. 컨테이너는 다른 컨테이너를 포함할수도 있습니다(Window및 그하위 클래스는 예외) JFrame객체는 Application용 메인 윈도우를 나타내며, Window 객체는 그렇지않습니다. 윈도우를 만들기위해서는 항상 JFrame이 필요 합니다. 스윙의 독립 윈도우 컨테이너들은 AWT가 제공해주지 못하는 능력을 제공하기 위해 JFrame에 이미 JRootPane이라는것을 만들어 두었는데 여기에 프로그래머가 만든 컴포넌트는 JRootPane이 관리하고 있는 contantPane이라는것에 넣도록 하고 있습니다.. JFrame, JApplet, JWindow, JDialog등은 JComponent를 상속하지 않으므로 스윙의 능력을 직접 쓸수 없는 대신 JComponent를 상속받은 JRootPane을 미리 넣어 두는것 입니다. 그렇게 함으로서 독립적인 윈도우로 표시되는 컨테이너도 스윙의 기능을 사용할수 있으며 그렇게 하기위해서는 프로그래머가 만든 컴포넌트를 contentPane에 넣는 것 입니다.

JRootPane
- AWT의 경우 Frame에 직접 add를 사용하여 컴포넌트를 추가하였으나 JFrame의 경우엔 getContentPane()을 이용하여 contentPane을 얻은후 거기에 컴포넌트를 추가 합니다.
- JFrame, JApplet, JDialog, JWindow등은 RootPaneContainer 인터페이스를 구현하고 있으며 getXXXPane() 함수등으로 pane(창)을 얻은후 작업을 합니다. 이 인터페이스에는 setXXXPane메소드도 존재 합니다.
- glasspane(투명창) : 기본적으로 보여지지 않게 설정되었으며 보여지게 한다면 어떤 컴포넌트 등의 위에 그림을 그릴 수 있다. 또한 마우스 이벤트등을 가로채 반응을 안하게 할수있습니다.-
- layeredPane(다중창) : contentPane과 JMenuBar(생략가능)등을 담으며 다층레이어로 이루어져 팜업메뉴, ToolTip과 같은 컴포넌트가 contentPane위에 오도록 보장 합니다. 즉 서로다른 레이어를 가지는 컴포넌트를 담을수 있습니다.
- contentPane(내용창) : 루트창의 가시적인컴포넌트들(메뉴창 제외)을 담은 개체
- JMenuBar(메뉴바) : 컨테이너의 메뉴를 담습니다.
- JRootPane 개체는 직계 부속 컴포넌트를 가질 수 없으므로 JRootPane 에 컴포넌트를 직접 부착 할 수 없고 , 그에 따라 다음 표현은 틀린 것이다 . rootPane.add(child); 그 대신 JRootPane 의 contentPane 을 구해 여기에 컴포넌트를 부착 합니다 . rootPane.getContentPane().add(child);

 



2013년 8월 2일 금요일

간단한 JAVA Swing Button 예제

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

public class SwingButtonTest {
        public void Test() {
        JFrame f = new JFrame("Swing 테스트"); //frame을 생성하고,
        JPanel p = new JPanel();              // panel을 생성합니다.
        JButton b = new JButton("예");        //그리고 button을...
        p.add(b);                                      // button을 panel에 추가합니다
        b.setToolTipText("이건 튤팁입니다.");
        f.getContentPane().add(p);
        f.pack();
        f.setVisible(true);
        }
public static void main(String args[]) {
        new SwingButtonTest().Test();
}
}

JAVA DataInputStream/DataOutputStream – 예제

import java.io.*;

class InputStreamTest {
  public static void main(String[] args) throws IOException {
    FileInputStream fis=new FileInputStream(args[0]);
    DataInputStream dis=new DataInputStream(fis);
    //BufferedReader dis = new BufferedReader(new InputStreamReader(fis));

    String s;
    while( (s=dis.readLine()) !=null) {  //readLine은 Deprecated 된 Method
                                //ReadLine을 사용하기 위해선 위의 주석된것을 사용
                                //하는것이 바람직하다.
System.out.println(s);
}
    fis.close();
  }
}




===================



import java.io.*;

class OutputStreamTest {
  public static void main(String[] args) throws IOException  {
FileOutputStream fos = new FileOutputStream("test.txt");
DataOutputStream dos=new DataOutputStream(fos);

dos.writeChars("하하하");
//dos.write("홍길동".getBytes()); //Default문자인코디을 따라 byte[]로 만듬
dos.writeUTF("256-1234");
os.writeInt(30);

dos.close();

  }

2013년 7월 29일 월요일

자바 스윙(JAVA Swing)의 HTMLEditorKit을 이용한 웹 페이지 파싱

Swing을 이용한 웹페이지 파싱



오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷  실무전문 강의)



JDK의 swing 패키지에는 html을 파싱 하는 기능이 포함되어 있는데 이기능을 적절히 이용하면 웹 페이지에서 원하는 내용을 추출 할 수 있을 것입니다.

 다음의 예제를 보시면 html Tag중에서 원하는 태그의 내용을 간단히 파싱하는 것을 확인 할 수 있으니 참고 하시기 바랍니다

[OnjWebParser .java]

import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.HTML;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpURLConnection;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.parser.ParserDelegator;
/**
 *
 * @author 이종철(오라클자바커뮤니티, 오엔제이프로그래밍 실무학원) * TODO To change the template for this generated type comment go to
 *
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class OnjWebParser {
 // 파서는 콜백 형식으로 되어 있다. 각 태그가 들어 올때 적절한 메소드가 호출됨
 private class CallbackHandler extends HTMLEditorKit.ParserCallback {
  // 태그가 시작할 때 호출 되는 메소드
  public void handleStartTag(HTML.Tag tag, MutableAttributeSet a, int pos) {
   // <A href 인 경우... A태그를 찾는다...
   if (tag == HTML.Tag.A) {
    System.out
      .println(a
        .getAttribute(javax.swing.text.html.HTML.Attribute.HREF));
   }
  }
  // 텍스트가 들어올때 호출되는 메소드
  public void handleText(char[] data, int pos) {
   System.out.println(data);
  }
 }
 public void parse(String str) {
  String content = null;
  try {
   // 입력받은 URL에 연결하여 InputStream을 통해 읽은 후 파싱 한다.
   URL url = new URL(str);
   HttpURLConnection con = (HttpURLConnection) url.openConnection();
   InputStreamReader reader = new InputStreamReader(
     con.getInputStream(), "euc-kr");
   new ParserDelegator().parse(reader, new CallbackHandler(), true);
   con.disconnect();
  }
  catch (Exception e) {
   e.printStackTrace();
  }
 }
 public static void main(String[] args) {

  OnjWebParser parser = new OnjWebParser();
 }
}

[결과]
오엔제이프로그래밍실무학원
./
javascript:goMenu01();
ㆍHOMEㆍ

mailto:webmaster@onjprogramming.co.kr
COMTACT USㆍ

javascript:goMenu63();
SITEMAP
javascript:fn_loginok()

ID저장
javascript:fn_loginok()
javascript:fn_loginok()
../member/mem-join.html
../member/mem-idpw.html
today Hit
126
교육센터회원
5919
커뮤니티회원
9433
/onj/curri/curri-master.html?command=1625
#tabs-1
JAVA
#tabs-2
ORACLE
#tabs-3
iPhone/Android
#tabs-4
.NET
#tabs-5
표준웹/HTML5
#tabs-6
채용/취업무료교육
#tabs-7
초보자(재학생)코스
../curri/curri-master.html?command=1645
JAVA&WEB프레임워크실무과정

14일
98시간

08-09
../curri/curri-master.html?command=1673
Spring3.X, MyBatis, Hibernate실무과정

5일
35시간

08-09
../curri/curri-master.html?command=1677
JAVA,JSP 초보에서 실무까지


18일
56시간

07-31
../curri/curri-master.html?command=1626
자바초보에서안드로이드까지

18일
54시간

08-01
../curri/curri-master.html?command=1667
JAVA&WEB프레임워크실무과정

33일
99시간

08-08
../curri/curri-master.html?command=1674
Spring3.X, MyBatis, Hibernate실무과정

12일
36시간

08-08
../curri/curri-master.html?command=1676
(개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정

14일
42시간

08-09
../curri/curri-master.html?command=1627
자바초보에서안드로이드까지

8일
56시간

08-03
../curri/curri-master.html?command=1646
JAVA&WEB프레임워크실무과정

14일
98시간

08-03
../curri/curri-master.html?command=1661
Spring3.X, MyBatis, Hibernate실무과정

5일
35시간

08-10
../curri/curri-master.html?command=1662
MiPlatform, XPlatform 실무강좌

5일
35시간

08-10
../curri/curri-master.html?command=1675
(개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정

6일
42시간

08-10
../curri/curri-master.html?command=1379
SQL초보에서실전전문가까지


8일
56시간

07-31
../curri/curri-master.html?command=1642
오라클 마스터


18일
54시간

07-29
../curri/curri-master.html?command=1583
SQL초보에서실전전문가까지

18일
54시간

08-07
../curri/curri-master.html?command=1666
SQL초보에서실전전문가까지

8일
56시간

08-03
../curri/curri-master.html?command=1637
오라클 마스터

8일
56시간

08-10
../curri/curri-master.html?command=1640
Android Developer 코스

5일
40시간

08-09
../curri/curri-master.html?command=1638
Android Developer 코스


14일
42시간

07-31
../curri/curri-master.html?command=1626
자바초보에서안드로이드까지

18일
54시간

08-01
../curri/curri-master.html?command=1332
iPhone 하이브리드 앱 개발 실무과정

14일
42시간

08-09
../curri/curri-master.html?command=1627
자바초보에서안드로이드까지

8일
56시간

08-03
../curri/curri-master.html?command=1216
iPhone 하이브리드 앱 개발 실무과정

6일
42시간

08-10
../curri/curri-master.html?command=1639
Android Developer 코스

6일
42시간

08-10
../curri/curri-master.html?command=1547
C#,ASP.NET마스터

8일
56시간

08-08
../curri/curri-master.html?command=1671
C#,ASP.NET마스터

18일
56시간

08-08
../curri/curri-master.html?command=1650
C#,ASP.NET마스터

8일
56시간

08-03
../curri/curri-master.html?command=1635
웹퍼블리싱 마스터

5일
40시간

08-09
../curri/curri-master.html?command=1625
[채용확정교육]오라클자바개발자4개월과정

80일
560시간

08-16
../curri/curri-master.html?command=1632
웹퍼블리싱 마스터

14일
42시간

08-08
../curri/curri-master.html?command=1630
HTML5, CSS3,Ajax, jQuery마스터과정

14일
42시간

08-09
../curri/curri-master.html?command=1631
HTML5, CSS3,Ajax, jQuery마스터과정


6일
42시간

00-00
../curri/curri-master.html?command=1633
웹퍼블리싱 마스터

6일
42시간

08-03
../curri/curri-master.html?command=1662
MiPlatform, XPlatform 실무강좌

5일
35시간

08-10
../curri/curri-master.html?command=1625
[채용확정교육]오라클자바개발자4개월과정

80일
560시간

08-16
../curri/curri-master.html?command=1547
C#,ASP.NET마스터

8일
56시간

08-08
../curri/curri-master.html?command=1671
C#,ASP.NET마스터

18일
56시간

08-08
../curri/curri-master.html?command=1650
C#,ASP.NET마스터

8일
56시간

08-03
../curri/curri-master.html?command=1642
 오라클 마스터

07-29
../curri/curri-master.html?command=1677
 JAVA,JSP 초보에서 실무까


07-31
../curri/curri-master.html?command=1626
 자바초보에서안드로이드까


08-01
../curri/curri-master.html?command=1650
 C#,ASP.NET마스터

08-03
../curri/curri-master.html?command=1646
 JAVA&WEB프레임워크실무과


08-03
../curri/curri-master.html?command=1583
 SQL초보에서실전전문가까지

08-07
/onj/curri/m-curri-master.html
../curri/curri-master.html?command=1631
 HTML5, CSS3,Ajax, jQuery


00-00
../curri/curri-master.html?command=1379
 SQL초보에서실전전문가까지

07-31
../curri/curri-master.html?command=1638
 Android Developer 코스

07-31
../curri/curri-master.html?command=1627
 자바초보에서안드로이드까


08-03
../curri/curri-master.html?command=1633
 웹퍼블리싱 마스터

08-03
../curri/curri-master.html?command=1547
 C#,ASP.NET마스터

08-08
#tabsub-1
NOTICE
#tabsub-2
구인구직
../notice/notice-content.html?num=1221&page=
오엔제이 프로그래밍 실무학원 소개
2013-07-20
../notice/notice-content.html?num=1064&page=
(전액무료)개발잘하는 신입 무료로 뽑기 프로젝트(미취업자취업무료교육)

2013-06-15
../notice/notice-content.html?num=1233&page=
[평일주간개강확정 7월15일] 채용확정자교육 16기
2013-07-12
../notice/notice-content.html?num=1232&page=
[평일야간개강확정7월19일] iPhone 하이브리드 앱 개발 실무과정
2013-07-08
../notice/notice-content.html?num=1230&page=
[평일주간개강확정] 7/8]Spring3.X, MyBatis, Hibernate실무과정
2013-06-27
../notice/notice-content.html?num=1229&page=
[평일야간개강확정 7/11]SQL초보에서실전전문가까지
2013-07-01
../notice/notice-content.html?num=1228&page=
[평일야간개강확정 6/25] C#,ASP.NET마스터
2013-06-20
../recruit/recruit-view.html?num=330&page=
2013-07-18
../recruit/recruit-view.html?num=329&page=
2013-07-13
../recruit/recruit-view.html?num=328&page=
2013-06-23
../recruit/recruit-view.html?num=327&page=
2013-06-12
../recruit/recruit-view.html?num=326&page=
2013-06-11
../recruit/recruit-view.html?num=325&page=
[오엔제이시스템즈]정규직 구인
2013-06-01
../recruit/recruit-view.html?num=316&page=
LG U+ 업무시스템개발
2013-04-22
사업자등록번호 :144-90-00505
통신판매업신고번호
 :2013-서울구로-0458
대표이사 :이종철
주소
 :서울 구로구 구로3동 222-8 코오롱디지털타워빌란트2차 803호 오엔제이 프로그래밍실무학원
전화 :02)851-4790
SI사업관련
 :02)851-4790
팩스
 :0505-719-4790
Copyright ⓒ

#
onjprogramming.co.kr

All Rights Reserved.

http://cafe.daum.net/fordeveloper2
../curri/m-curri-calendar.html
../recruit/recruit-01.html
javascript:window.external.AddFavorite('http://www.onjprogramming.co.kr/' ,
'오엔제이 프로그래밍실무학원');

[출처]오라클자바커뮤니티
www.oraclejavacommunity.co.kr