보통 sftp만 설정하면 된다고했어 했는데 이제야 겨우 다시 설정할수 있었다(중요한건 마지막에 계정별 허용프로그램)

 

1) 파일서비스 -> SFTP 서비스 활성

 

2) 터미널 서비스 SFTP 활성

3) 계정별 허용프로그램 설정(이것때문에 이클립스 및 다른 응용프로그램에서 접속이 안되었음)

 

'IT > 시놀로지' 카테고리의 다른 글

Web Station  (0) 2021.12.20
다운로드 스테이션 및 토렌토 처리  (0) 2021.12.20
인증서 등록 및 https 접속시 안전하지 않음 설정  (0) 2021.12.20
DSM 버전확인  (0) 2021.12.20

이전에 늘 무식하게 날짜  변경을 한듯 

 

1) 과거 처리 방법(무식하게 짜르고 하이픈(-) 붙이고 해서 날짜 타입을 만듬)

 

2) 현재 사용방법(텍스트 나누기 방법으로 사용)

    ※ 단계는 좀 있긴 한데 열별로 변환시 유용함

   - 데이터열을 선택 ->텍스트 나누기(한열씩 작업하여 다음열에 영향을 주지 않도록 해야됨 아니면 나눌때부터 처리) 

 

- 다음 후 텍스트 마법사  3단계중 3단계에서 -> 날짜를 선택하면 됨

- 최종 변경후 모습

ㅁ 시작프로그램 띄우기

     shell:startup    

 

ㅁ 도스에서 연결프로그램 변경

    1) 도스모드 실행

    2) 확장자 연결명 보기

         - 전체 볼때

            assoc

         - 특정확장자만 볼때  ex) .txt

            assoc .txt

          => 조회하면 

          .txt=txtfile    => 확장자 연결명이 txtfile로 되어 있음(1번더 확장자 연결명조회로 해당 연결 프로그램을 찾음)

   3) 확장자 연결명으로 연결프로그램 

       - 전체 조회

         ftype 

       - 특정확장자만 조회 (ex txtfile)

          ftype txtfile 

     4) 연결프로그램 변경

          txtfile="C:\Program Files (x86)\IDM Computer Solutions\UltraEdit\Uedit32.exe" "%1"

         ※ 프로그램명 + %1(이건 해당파일경로가 들어갈 자리임 

         ex) NotePad로 변경시

          txtfile="NOTEPAD" "%1"

       ※ 참고로 NotePad는 경로가 이미지정되어 있으므로 생략 가능함

 

 

'IT > 윈도우 일반' 카테고리의 다른 글

울트라에디터 한글편집오류  (0) 2023.03.11
윈도우 숨겨진 창 보이기  (0) 2022.06.18
명령줄로 연결프로그램 변경  (0) 2022.05.25

1) Alt + 텝으로 선택 ->  윈도우 키 + 방향키로 이동해본다

 

그래도 안되면

 

Alt+탭으로 선택하고 -> Alt+텝을 누르면 창크기 조정 메뉴가 나올때 전체 창후 크기조정

'IT > 윈도우 일반' 카테고리의 다른 글

울트라에디터 한글편집오류  (0) 2023.03.11
도스 커멘드 정리  (0) 2022.06.18
명령줄로 연결프로그램 변경  (0) 2022.05.25

run.vbs 파일  생성 

 

Dim Arg, var1, var2
Set Arg = WScript.arguments
var1 = Arg(0)
'var2 = Arg(1)  ==> 주석
msgbox var1

Set WshShell = CreateObject("WScript.Shell")
'WshShell.Run chr(34) & "C:\Windows\notepad.exe"  "D:\aaa.txt" & Chr(34),1     ==>주석 
WshShell.Run "notepad.exe " & var1       ==> chr(34)를 빼고 하니 됨
Set WshShell = Nothing

ㅁ 파일형식명 찾기 
    assoc .txt              ==> .txt형식명 찾기

ㅁ 신규 파일타입  형식명을 변경
    assoc .txt=txtfile

ㅁ 신규 파일타입명에 연결
   ftype txtfile="C:\Windows\notepad.exe" "%1" 
   ftype txtfile="C:\Program Files (x86)\IDM Computer Solutions\UltraEdit\Uedit32.exe" "%1"

 

ㅁ 파일타입명에 연결프로그램 확인 

    ftype txtfile

'IT > 윈도우 일반' 카테고리의 다른 글

울트라에디터 한글편집오류  (0) 2023.03.11
도스 커멘드 정리  (0) 2022.06.18
윈도우 숨겨진 창 보이기  (0) 2022.06.18

좀 메뉴부터 많이 변경된듯 함

일단 설치후 왼쪽 메뉴 및 내용이 변경됨

1) 가상호스트가 사라짐 웹서비스 포털에서 생성 -> 서비스포털 선택시  3가지 메뉴가 나옴

가상호스트 선택하면 사용자가 임의 폴더를 가상호스트 할수 있고

패키지 서버 포털이라고 File Station에 보면 web_pageage가 있는데 추가 워드프로세스, 줌라등 기본제공 패키지 설치로 사용시 사용하는듯. 

 

MobaXterm

 

MobaXterm의 Home Edition은 무료입니다. 고급 기능을 사용하거나 MobaXterm을 전문적으로 사용하려면 Professional 에디션에 가입 할 수 있습니다. Professional Edition은 사용자 당 $ 69입니다.

MobaXterm은 휴대용 및 가벼운 응용 프로그램입니다. 즉, USB 스틱에서 시작할 수 있습니다. 하나의 휴대용 .exe 파일에서 SSH, X11, RDP 등과 같은 원격 네트워크 도구와 bash 및 ls와 같은 UNIX 명령을 Windows 데스크톱으로 가져옵니다. MobaXterm은 텍스트 편집기를 제공합니다.

풍모:

  • MobaXterm에는 내장 X 서버, X11 포워딩 및 SSH가있는 탭 터미널이 있습니다.
  • Windows에 UNIX 명령을 가져 왔습니다.
  • 플러그인을 통해 확장 가능한 플랫폼입니다.
  • 보안 SSH 연결을 사용하여 암호화를 통해 그래픽 애플리케이션 및 파일 전송에 네트워크 보안을 제공합니다.
 

일단 패키지 센터에서 Download Station을 설치합니다.

 

그리고 사용밥법 하단 톱니바뀌 설정 기본대상폴더와  토렌토감시폴더를 만든다

토렌토 감시폴더는 토렌토 파일을 올렸을때 알아서 토렌토 실행해줌

 

토렌토파일 검색파일을 파일스테이션에 감시폴더에 넣으면 바로 토렌토 실행

'IT > 시놀로지' 카테고리의 다른 글

시놀로지 SFTP 접속 설정방법  (0) 2022.06.18
Web Station  (0) 2021.12.20
인증서 등록 및 https 접속시 안전하지 않음 설정  (0) 2021.12.20
DSM 버전확인  (0) 2021.12.20

 

  • [제어판 - 보안 - 인증서]에서 [추가]를 클릭합니다.

  • [새 인증서 추가]가 선택된 상태에서 [다음]을 클릭합니다. (기존 인증서 교체를 하는 게 편하기는 하지만, 문제가 발생할 것을 대비해서 인증서를 추가하고 난 후 설정하는 방법을 택했습니다.)

  • [Let’s Encrypt에서 인증서 얻기]를 선택하고 [다음]을 클릭합니다.

  • 도메인 이름과 이메일 주소를 입력하고 [적용]을 클릭하면 인증서가 추가됩니다.

 

인증서 설정하기

  • 추가된 인증서를 선택하고 [편집]을 클릭합니다.

  • [기본 인증서로 설정]에 체크하고 [확인]을 클릭합니다.

  • 인증서를 선택하고 [구성]을 클릭합니다.

 

 

그리고 인증서 구성을 해야됨

'IT > 시놀로지' 카테고리의 다른 글

시놀로지 SFTP 접속 설정방법  (0) 2022.06.18
Web Station  (0) 2021.12.20
다운로드 스테이션 및 토렌토 처리  (0) 2021.12.20
DSM 버전확인  (0) 2021.12.20

 

babel 설치 한글판 설치후 영문버전 실행

 바로가기로 만들고 속성에 실행파일 경로에 옵션을 두면 됨

  ex) eclipse.exe -nl en_us

'IT > Tip' 카테고리의 다른 글

윈도우 아이콘 캐시 새로고침하기  (0) 2023.02.13

서론

Windows 64bit 운영체제에서 웹 시스템을 32bit로 운영해야 하는 경우가 발생하여,
아래와 같이 32bit의 오라클 클라이언트(인스턴트 버전)를 설치하여 운영하였다.

 

내용

1. 오라클 공식 홈페이지에서 32bit 설치파일을 다운로드한다.

   instantclient-basic-nt-{version} 다운로드

   instantclient-odbc-nt-{version} 다운로드

 

2. 압축을 풀어 한 폴더에 복사한다.

   ex) d:\oracle_odbc

 

3. 환경변수를 설정한다.

  TNS_ADMIN = d:\oracle_odbc

  PATH += d:\oracle_odbc

 

4. Install 파일을 실행한다.

   ex) d:\oracle_odbc\odbc_install.exe

 

5. odbc를 설정한다.

   아래와 같이 64bit Windows에는 32bit버전의 odbc 관리자와 64bit버전의 odbc 관리자를 제공한다.

   오라클 클라이언트를 32bit용으로 설치했기 때문에 32bit버전의 odbc 관리자를 통해 설정해야 한다.

 

   ※ odbc 설정시 오류코드 14001로 인한 에러가 발생하면,

     "Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package ATL Security Update" 설치하면 해결된다.

 

 

뷰어 프레임워크는 MVC(모델-뷰-컨트롤)로 알려진 디자인 패턴으로 구현된다.

Viewer의 하위 클래스인 ContentVier와 StructuredViewer가 있다.

 

ContentViewer는 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 

StructuredViewer는 ContentViewer에게 제공하는 데이터를 구조화 한다. 구조화는 필터링, 정렬 기능 같은 일반적인 작업을 실행하는 메도드들이 이 계층에서 구현된다.

 

각 위젯인 Tree, List, Table 등은 이에 맞는 Viewer의 하위 클래스로 ListViewer나 tableViewer 등이 있다.

 

ㅁ ContentViewer의 프로 바이더

   프로바이더에는 두 개가 존재한다. ContentProvider, LabelProvider

 

   ▶ LabelProvider,TableLabelProvider 보여줄 텍스트랑 이미지를 설정

   ▶ ContentProvider 레이블 프로바이더로 관여하기도 하지만 컨텐트 프로바이더로도 역할을 한다.

     레이블 프로바이더가 요소를 보이기 위한 텍스트이미지를 제공하는 반면에 컨텐츠 프로바이더는 실제적으로 요소를 보이게끔 해준다.

 

※ 내용정리 참고: https://wedul.site/70

 

JFace TreeViewer설명

Viewer Viewer는 MVC 패턴을 가지고 있다. Viewer의 하위 클래스인 ContentVier와 StructuredViewer가 있다. ContentViewer는 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 이들..

wedul.site

 

ㅁ TableViewer의 예제

   1) 일단 모델부터  

package com.dicws.mydays.model;

import java.util.ArrayList;
import java.util.List;

public class MyDaysModel {
	
	//모델요소
	String part;
	String title;
	String conetents;
	String writer;
	String wDate;

	//table모델시
	public MyDaysModel(String part, String title, String conetents, String writer, String wDate) {
        super();
        this.part = part;
        this.title = title;
        this.conetents = conetents;
        this.writer = writer;
        this.wDate = wDate;
    }

	/*Getter/Setter 정의*/
	public String getPart() {
		return part;
	}

	public void setPart(String part) {
		this.part = part;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getConetents() {
		return conetents;
	}

	public void setConetents(String conetents) {
		this.conetents = conetents;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	public String getwDate() {
		return wDate;
	}

	public void setwDate(String wDate) {
		this.wDate = wDate;
	}
}

   2) 실행모듈정의 및 설명 

package com.dicws.mydays.test;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

import com.dicws.mydays.model.MyDaysModel;

public class TableSnippet extends ApplicationWindow {

	List<MyDaysModel> input = new ArrayList<MyDaysModel>();
	
	public TableSnippet() {
		super(null);
	}

	public void run() {
		// Don't return from open() until window closes
		setBlockOnOpen(true);
		// Open the main window
		open();
		// Dispose the display
		Display.getCurrent().dispose();
	}

	/**
	 * Configures the shell
	 * 
	 * @param shell
	 *            the shell
	 */
	protected void configureShell(Shell shell) {
		super.configureShell(shell);
		shell.setText("Team Tree");
	}

	/**
	 * Creates the main window's contents
	 * 
	 * @param parent
	 *            the main window
	 * @return Control
	 */
	protected Control createContents(Composite parent) {

		//table data 생성
		for (int i = 1; i < 10; i++) {
			input.add(new MyDaysModel("상환전화 i:" + i, "입금상환", "내용", "나야나1", "aa"));
		}

		TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
		Table table = tableViewer.getTable();
		
		/*
		 * Header Column 생성
		 */
		String[] COLUMN_HEADER = new String[]{"타이틀","제목","내용","작성자","작성일"};
		for(String header : COLUMN_HEADER ) {
			new TableColumn(tableViewer.getTable(), SWT.NONE).setText(header);
		}
		
		//table.layout(); // 레이아웃을 수동으로 갱신해야할 경우에 사용
		table.setLinesVisible(true);
		table.setHeaderVisible(true);
		tableViewer.setUseHashlookup(true);    // table 렌더링 속도 향상
		
		
        // Column Properties 지정 : ICellModifier 동작시 필수
        tableViewer.setColumnProperties(COLUMN_HEADER);
        tableViewer.setContentProvider(new IStructuredContentProvider() {
			
			@Override
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
				// TODO 자동 생성된 메소드 스텁
			}
			
			@Override
			public void dispose() {
				// TODO 자동 생성된 메소드 스텁
			}
			
			@Override
			public Object[] getElements(Object inputElement) {
				return ((ArrayList<MyDaysModel>)input).toArray();
			}
		});
        
		tableViewer.setLabelProvider(new ITableLabelProvider() {
			
			@Override
			public void removeListener(ILabelProviderListener listener) {
				// TODO 자동 생성된 메소드 스텁
			}
			
			@Override
			public boolean isLabelProperty(Object element, String property) {
				// TODO 자동 생성된 메소드 스텁
				return false;
			}
			
			@Override
			public void dispose() {
				// TODO 자동 생성된 메소드 스텁
			}
			
			@Override
			public void addListener(ILabelProviderListener listener) {
				// TODO 자동 생성된 메소드 스텁
				
			}
			
			@Override
			public String getColumnText(Object element, int columnIndex) {
				MyDaysModel myDays = (MyDaysModel)element;
		        switch (columnIndex) {
		        case 0:
		            return myDays.getPart();
		        case 1:
		            return myDays.getTitle();
		        case 2:
		            return myDays.getConetents();
		        case 3:
		            return myDays.getWriter();
		        case 4:
		            return myDays.getwDate();
		        }
		        return "";
		    }
			
			@Override
			public Image getColumnImage(Object element, int columnIndex) {
				// TODO 자동 생성된 메소드 스텁
				return null;
			}
		});
		
		tableViewer.setInput(input);
		tableViewer.refresh();
		
		for (int i = 0, n = table.getColumnCount(); i < n; i++) {
		  table.getColumn(i).pack();
		}
		table.pack();
	
        /*
         * Cell Modify 기능추가
         */
//        // Column Properties 지정 : ICellModifier 동작시 필수
//        tableViewer.setColumnProperties(COLUMN_HEADER);
//        
//        // CellEditor 생성 
//        CellEditor[] CELL_EDITORS = new CellEditor[COLUMN_HEADER.length];
//        for(int i=0; i < CELL_EDITORS.length ; i++) {
//            CELL_EDITORS[i] = new TextCellEditor(tableViewer.getTable());
//            // or CheckboxCellEditor, ComboBoxCellEditor 등 사용
//        }        
//        tableViewer.setCellEditors(CELL_EDITORS);
        
		return table;
	}
	
	  /**
	   * The application entry point
	   * 
	   * @param args
	   *            the command line arguments
	   */
	  public static void main(String[] args) {
	    new TableSnippet().run();
	  }	

}

 

ㅁ TreeViewer의 예제

   1) 일단 모델부터  

package com.dicws.mydays.model;

import java.util.ArrayList;
import java.util.List;

public class MyDaysModel {
	
	
	String part;
	String title;
	String conetents;
	String writer;
	String wDate;
	
	//tree모델시
	public MyDaysModel parent; // 부모노드
	public List<MyDaysModel> child = new ArrayList(); // 자식노드
	public int counter;
	
	//tree모델시
	public MyDaysModel(int counter, MyDaysModel parent) {
        this.parent = parent;
        this.counter = counter;
    }
	
	//tree모델시 : 데이터만 set
	public void setTreeData(String part, String title, String conetents, String writer, String wDate) {
        
        this.part = part;
        this.title = title;
        this.conetents = conetents;
        this.writer = writer;
        this.wDate = wDate;
    }

    public String getPart() {
		return part;
	}

	public void setPart(String part) {
		this.part = part;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getConetents() {
		return conetents;
	}

	public void setConetents(String conetents) {
		this.conetents = conetents;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	public String getwDate() {
		return wDate;
	}

	public void setwDate(String wDate) {
		this.wDate = wDate;
	}


}


   2) 실행모듈정의 및 설명 

package com.dicws.mydays.test;

import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;

import com.dicws.mydays.model.MyDaysModel;
import com.dicws.mydays.provider.MyDaysTreeContentProvider;
import com.dicws.mydays.provider.MyDaysTreeLblProvider;

public class TreeSnippet1 extends ApplicationWindow {

	MyDaysModel input;
	
	public TreeSnippet1() {
		super(null);
	}

	public void run() {
		// Don't return from open() until window closes
		setBlockOnOpen(true);
		// Open the main window
		open();
		// Dispose the display
		Display.getCurrent().dispose();
	}

	/**
	 * Configures the shell
	 * 
	 * @param shell
	 *            the shell
	 */
	protected void configureShell(Shell shell) {
		super.configureShell(shell);
		shell.setText("Team Tree");
	}

	/**
	 * Creates the main window's contents
	 * 
	 * @param parent
	 *            the main window
	 * @return Control
	 */
	protected Control createContents(Composite parent) {

		TreeViewer treeViewer = new TreeViewer(parent, SWT.BORDER);
		Tree tree = treeViewer.getTree();
		tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 6, 1));
		// tree.setLayout(new TreeColumnLayout());
		tree.setHeaderVisible(true);
		tree.setLinesVisible(true);

		treeViewer.setContentProvider(new ITreeContentProvider() {
			
			@Override
			public void inputChanged(Viewer viewer, Object obj, Object obj1) {
				// TODO 자동 생성된 메소드 스텁
				
			}
			
			@Override
			public void dispose() {
				// TODO 자동 생성된 메소드 스텁
				
			}
			
			@Override
			public boolean hasChildren(Object obj) {
				// TODO 자동 생성된 메소드 스텁
				return false;
			}
			
			@Override
			public Object getParent(Object obj) {
				// TODO 자동 생성된 메소드 스텁
				return null;
			}
			
			@Override
			public Object[] getElements(Object inputElement) {
				return ((MyDaysModel)inputElement).child.toArray();
			}
			
			@Override
			public Object[] getChildren(Object parentElement) {
				return getElements(parentElement);
			}
		});
		
		treeViewer.setLabelProvider(new ILabelProvider() {
			
			@Override
			public void removeListener(ILabelProviderListener ilabelproviderlistener) {
				// TODO 자동 생성된 메소드 스텁
				
			}
			
			@Override
			public boolean isLabelProperty(Object obj, String s) {
				// TODO 자동 생성된 메소드 스텁
				return false;
			}
			
			@Override
			public void dispose() {
				// TODO 자동 생성된 메소드 스텁
				
			}
			
			@Override
			public void addListener(ILabelProviderListener ilabelproviderlistener) {
				// TODO 자동 생성된 메소드 스텁
				
			}
			
			@Override
			public String getText(Object element) {
				return ((MyDaysModel)element).getPart();
			}
			
			@Override
			public Image getImage(Object obj) {
				// TODO 자동 생성된 메소드 스텁
				return null;
			}
		});

		TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
		column1.setText("Column 1");
		TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
		column2.setText("Column 1");

		setTree();
		treeViewer.setInput(input);
		treeViewer.refresh();
		
		
		for (int i = 0, n = tree.getColumnCount(); i < n; i++) {
			tree.getColumn(i).pack();
		}
		tree.pack();
		return treeViewer.getTree();
	}
	
	private void setTree() {

		// new LabelView();
		MyDaysModel root = new MyDaysModel(0, null);
		MyDaysModel tmp;
		for (int i = 1; i < 10; i++) {
			tmp = new MyDaysModel(i, root);
			tmp.setTreeData("상환전화 i:" + i, "입금상환", "내용", "나야나1", "aa");
			root.child.add(tmp);

			for (int j = 1; j < i; j++) {
				MyDaysModel tmp1 = new MyDaysModel(j, tmp);
				tmp1.setTreeData("상환전화 j:" + j, "입금상환", "내용", "나야나1", "aa");
				tmp.child.add(tmp1);
			}
		}

		input = root;

	}	

	/**
	 * The application entry point
	 * 
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String[] args) {
		new TreeSnippet1().run();
	}

}

 

 

 

 

참고 사이트 : wiki.eclipse.org/JFaceSnippets#Snippet002_-_Tree_Viewer

 

JFaceSnippets - Eclipsepedia

JFace-Snippets are small and easy understandable programming examples of how to use the JFace API. To browse the examples, navigate to the examples GIT repository. Copy Paste The header section of each snippet is a link to the plain source. You can copy th

wiki.eclipse.org

참고 사이트 : www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm

 

SWT JFace Eclipse « Java

java2s.com  | © Demo Source and Support. All rights reserved.

www.java2s.com

 

 

'IT > RCP' 카테고리의 다른 글

RCP 배포관련 문제  (0) 2022.12.26
[RCP] RCP 기본생성 방법  (0) 2020.12.20
[RCP] 개발 환경설정  (0) 2020.12.20
[RCP] 사전 준비 및 주요 용어  (0) 2020.12.20
[SWT] 윈도우 레지스트리  (0) 2020.12.19

이클립스 Java 프로젝트에서 외부 라이브러리를 Jar로 만들경우 내부 에 포함시키는 방법

com.dicws.db   : 배포할 프로젝트

외부라이브러리 : db2jcc4.jar, jdbc.jar, mysql-connector-java-5.1.28-bin.jar, ojdbc14.jar, sqlite-jdbc-3.7.2.jar

 

ㅁ Jar로 배포(Runnable JAR File) 

    배포할 프로젝트 선택후 파일(F)->내보내기

 

 

▶ 실행구성(Launch configuration Main) : Main Class 지정

 대상내보내기(Export destination) :  생성할 JAR 파일의 위치와 이름 설정

 Library handling 에서 옵션 설정

   - Extract required libraries into generated JAR    : 필수 라이브러리들을 추출해서 내부로 포함.

   - Package required libraries into generated JAR : 필수 라이브러리들을 전부 패키지로 Jar 내부로 포함

   - Copy required libraries into sub-folder next to the generated JAR : 필수 라이브러리들을 전부 Jar 외부의 하위 경로 로 복사하고 class-path로 참조한다. 필수 라이브러리들은 생성할 JAR파일명_lib에 저장한다.

(사용하지 않는 라이브러리가 포함될 수 있다)

 

 

예) Extract required libraries into generated JAR로 실행Jar배포 하고 다른프로젝트에서 가져왔을때

가져왔을때 참조 라이브러리

원래 프로젝트 패키지 com.dicws.db 외 라이브러리가 내부처럼 Jar안에 들어가 있음

ㅁ 객체지향 프로그래밍

객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)행위(behave)로 이루어진 객체로 만드것

 

   좋은 객체를 만드는 법이다. 이것을 다른 말로는 설계를 잘하는 법이라고 할 수 있다. 좋은 설계는 현실을 잘 반영해야 한다. 

 

ㅁ 부품화

   정신적인 것은 실체가 없고, 무한하고, 유연하다. 이러한 특성은 정신이 가진 장점이면서  소프트웨어의 극치다. 하지만 정신의 이러한 특성은 때로 오해나 모순 같은 문제점을 유발한다. 소프트웨어도 이러한 문제점을 그대로 상속받는다. 이러한 문제점을 극복하기 위한 노력 중의 하나가 부품화라고 할 수 있다

 

ㅁ은닉화 캡슐화

  제대로된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 방법만 알면 쓸 수 있어야 한다. 이를테면 모니터가 어떻게 동작하는지 몰라도 컴퓨터와 모니터를 연결하는 방법만 알면 화면을 표시 할 수 있는 것과 같은 이치다. 즉 내부의 동작 방법을 단단한 케이스 안으로 숨기고 사용자에게는 그 부품의 사용방법만을 노출하고 있는 것이다. 이러한 컨셉을 정보의 은닉화(Information Hiding), 또는 캡슐화(Encapsulation)라고 부른다 

 

ㅁ 인터페이스 

   컴퓨터와 모니터를 만드는 업체들은 위와 같은 케이블의 규격을 공유한다. 모니터 입장에서는 컴퓨터가, 컴퓨터 입장에서는 모니터가 어떤 식으로 만들어졌는지는 신경쓰지 않는다. 각각의 부품은 미리 정해진 약속에 따라서 신호를 입, 출력하고, 연결점의 모양을 표준에 맞게 만들면 된다. 이러한 연결점을 인터페이스(interface)라고 한다.

   - 인터페이스에 정의된 모든 메소드는 상속받는 클래스에서 전부 오버라이딩해야 한다.

   - 인터페이스로부터 상속 받을 때 implements키워드 사용

 

ㅁ 클래스와 인스턴스

    클래스는 연관되어 있는 변수와 메소드의 집합

    new 키워드를 통하여, 이렇게 만들어진 구체적인 제품을 인스턴스(instance)라고 부른다. 아래의 관계를 기억하자.

   

   맴버(member)는 영어로 구성원이라는 뜻이다. 객체도 구성원이 있는데 아래와 같다.

  • 변수
  • 메소드

  ※ 클래스도 인스턴스도 맴버를 가질수 있지만 인스턴세는 맴버값이 다르다

 

  인스턴스 변수와 클래스 변수는 아래와 같이 부르기도 한다.

  • 인스턴스 변수 -> Non-Static Field
  • 클래스 변수 -> Static Field
더보기

Class         : 객체를 만들어 내기 위한 설계도

Constructor : new  Instance 통하여 초기화담당   ==>초기화시 이름, 나이, 출생지 받는 것

Instance     : 구현된 구체적인 실체(메모리사용)        == 생성자라고 함

ㅁ 상속(Inheritance)

    상속(Inheritance)이란 물려준다는 의미다. 어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능을 상속

※ 부모 클래스와 자식 클래스의 관계를 상위(super) 클래스와 하위(sub) 클래스라고 표현하기도 한다. 또한 기초 클래스(base class), 유도 클래스(derived class)라고도 부른다

Animal이란 공통성격을 만들어 Cat, Mouse, Duck등 상속 관계

ㅁ 생성자 

     기본생성자, 즉 매개변수가 없으면 start 

 

ㅁ Overriding

   상속은 상위 클래스의 기능을 하위 클래스에게 물려주는 기능

 

ㅁ Overloading

   이름은 같지만 시그니처는 다른 메소드를 중복으로 선언 할 수 있는 방법을 메소드 오버로딩(overloading)이라고 한다.

 

※ Overriding vs Overloding

    riding(올라탄다)을 이용해서 부모 클래스의 메소드의 동작방법을 변경하고

    loading을 이용해서 같은 이름, 다른 매개변수의 메소드들을 여러개 만들 수 있다는 사실을 아는 것이 중요

    ※ 참고로 overriding는 재정의라는 사전적인 의미

 

ㅁ abstract 

    abstract란 한국어로는 추상으로 번역된다. 이에 대한 정의는 뒤에서 내리도록 하고 지금 단계에서는 abstract라는 것이 상속을 강제하는 일종의 규제라고 생각하자. 즉 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이 abstract다. 

   - 추상 메소드는 선언만 되어 있고 구현 부분이 없는 메소드로 메서드의 결과형 앞에 abstract를 기재해서 생성

   - 추상 메소드는 반드시 하위 클래스에서 오버라이딩 되어서 구현되어야 한다.

   - 추상 메소드는 일반적인 멤버 변수와 메소드를 가질 수 있습니다.

   - 하지만 객체를 생성하지 못하여 상속을 통해서만 사용되어 집니다.

 

ㅁ polymorphism(다형성)

    다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것

    - overloging 과 다형성

    - 클래스와 다형성

    - 인터페이스와 다형성

 

ㅁ 참조

    - 복제

public class Test {

	public static void runValue() {
		int a = 1;
		int b = a;
		b = 2;
		System.out.println("runValue a " + a);
		System.out.println("runValue b " + b);
	}

	public static void main(String[] args) {
		runValue();
	}

}

   a= 1, b = 2값이다

 

   - 참조

public class Test {

	public static void runReference() {
		A a = new A(1);
		A b = a;
		b.id = 2;
		System.out.println("runReference, " + a.id);
		System.out.println("runReference, " + b.id);
	}

	public static void main(String[] args) {
		runReference();
	}
}

class A{
    public int id;
    A(int id){
        this.id = id;
    }
}

    ※ 만일 b에 담긴 인스턴스의 id 값을 2로 변경했을 뿐인데 a.id의 값도 2가 된 것이다

 

ㅁ제네릭

   제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 말이 어렵다. 아래 그림을 보자.

※ 제네릭으로 올 수 있는 데이터 타입을 특정 클래스의 자식으로 제한할 수 있다

 

ㅁ 컬렉션즈 프레임워크(Collections FrameWork) 

    배열의 불편한 점이 있었는데 그 중의 하나가 한번 정해진 배열의 크기를 변경할 수 없다는 점이다. 이러한 불편함을 컬렉션즈 프래임워크을 해결함

 그럼 이제부터 컬렉션즈 프래임워크가 무엇인가 본격적으로 알아보자. 컬렉션즈 프래임워크라는 것은 다른 말로는 컨테이너라고도 부른다. 즉 값을 담는 그릇이라는 의미이다. 그런데 그 값의 성격에 따라서 컨테이너의 성격이 조금씩 달라진다. 자바에서는 다양한 상황에서 사용할 수 있는 다양한 컨테이너를 제공하는데 이것을 컬렉션즈 프래임워크라고 부른다. ArrayList는 그중의 하나다.

위의 그림은 컬렉션즈 프래임워크의 구성을 보여준다. Collection과 Map이라는 최상위 카테고리가 있고, 그 아래에 다양한 컬렉션들이 존재한다. 그럼 구체적인 컬렉션즈 프래임워크 클래스들을 살펴보자.

 

참고 사이트 : opentutorials.org/course/1223/6088opentutorials.org/course/1223/6446

프로젝트 새로 만들기

플러그인 프로젝트 선택
프로젝트 이름 및 플러그인실행대상 선택
기본 자바 실행버전(좀 낮게), UI 제공, RCP응용프로그램 작성여부 Yes
RCP 기본 템플릿 선택(3.x로 시작)
패키지 기본설정
RCP 기본템플릿 실행(plugin.xml선택, 개요탭에 Eclipse응용프로그램 실행)

ㅁ 기본구조 확인

기본적으로 RCP프로젝트를 생성하면 아래와 같은 기본 클래스들이 생긴다. 이 클래스들은 RCP프로그램에서 각자의 역할이 있으며, 구성하고있는 역할을 알고 있어면 훗날 개발을 진행할 때 진행이 수월하다.

  • Application

    RCP프로그램의 main routine으로 동작 및 프로그램의 컨트롤러 역할을 한다. 또한 Workbench와 다른 Workbench Advisor라고 불리는 다른 클래스들을 연결시키는 역할한다. 이때 Workbench는 프로그램 하나를 말한다. Workbench는 Worbench Window을 포괄하는 개념이며, 예를 들어 새로운 이클립스창이 띄워졌을때 New window를 하면 하나의 창이 더 띄워진다. 이때 각각의 창은 Workbench Window이고, 2개가 존재한다. 하지만 Workbench는 창이 늘어나도 하나로 존재하게된다.

  • WorkbenchAdvisor

    Workbench의 lifecycle에 대해 명시하고 있다. default perspective와 같은 중요한 파라미터들을 Workbench에 제공한다. 가장 중요한 점은 WorkbenchAdvisor의 메소드들은 오버라이드가 될 수 없다.

  • WorbenchWindowAdvisor

    상태 line, 툴바. 제목. 윈도우 사이즈 등 커스터마이즈 하길 원하는 것들이 들어간다.

  • Perspective

    view, editor, menu들의 위치와 사이즈를 갖고있음 적어도 하나의 perspective는 가지고 있어야 한다.

  • View

    화면을 담당하는 부분이다. 곧, 뷰어들을 생성하고 초기화를 진행한다. 화면을 Viewer의 컨트롤에 요청하는 setFocus()와 모든 구성 요소들을 활성화하는 CreatePartControl(Composite) 함수가 반드시 필요하다. 이 두 함수는 처음 실행될때 호출된다. setFocus() createPartControl(Composite)는 시키기 위해 선언하는 곳이다

 

10가지의 플러그인 중 큰 몇가지만 설명하고자 한다.

  • UI Workbench: UI Workbench는 editor, view, perspective 등을 포함하고 있다.
  • SWT: 운영체제의 네이티브 윈도우 환경과 긴밀하게 통합된 다양한 컴포넌트와 플랫폼 독립적인 API를 제공한다. 즉, 윈도우에서 정의한 위젯에 대한 접근을 제공한다.
  • JFACE: 범용 UI 개념을 위한 구조와 편의기능을 제공한다. SWT를 이용하여 사용자 인터페이스를 개발할 때 해야하는 많은 공통 작업들을 간단하게 해 주는 컴포넌트와 헬퍼 유틸리티 세트를 제공 데이터 뷰, 위저드, 다이얼로그 컴포넌트 등을 제공하기 위해 SWT를 확장하는 많은 유틸리티 클래스들을 포함하고 있다.
  • RUNTIME: 플러그인과 페이지 로딩 및 초기화 간에 확장 포인트 모델 기반의 느슨한 결합을 정의하고 있다.
  • OSGi: 이클립스에서 플러그인의 발견 및 애플리케이션의 재시작 없이 플러그인을 로딩 및 언로딩하는 것을 포함하여 플러그인의 라이프사이클 관리등을 위한 프레임워크이다.

※ (참고)워크벤치 어드바이저 생명주기



ㅁ RCP관련 참고 사이트 들

    www.eclipse.org/articles/

 

Eclipse Corner - Eclipsepedia

These following articles have been written by members of the various project development teams and other members of the Eclipse community. Eclipse setup instructions on a new Linux (or other OS) computer Getting started with Eclipse as a beginner is diffic

wiki.eclipse.org

    o7planning.org/en/10953/eclipse-rcp

 

Eclipse RCP

The small examples The small examples No examples

o7planning.org

    www.vogella.com/tutorials/eclipse.html

 

Eclipse, RCP, Plugin and OSGi Development

 

www.vogella.com

 

'IT > RCP' 카테고리의 다른 글

RCP 배포관련 문제  (0) 2022.12.26
[JFace] 뷰어와 뷰어 프레임 워크  (0) 2020.12.26
[RCP] 개발 환경설정  (0) 2020.12.20
[RCP] 사전 준비 및 주요 용어  (0) 2020.12.20
[SWT] 윈도우 레지스트리  (0) 2020.12.19

ㅁ SWT 다운로드

과거에는 바로 swt.jar만 가져올 수 있게 했는데, 여러단계를 거쳐야 들어갈 수 있게 되어 있다

먼저 SWT사이트를 접속해보자: http://www.eclipse.org/swt/

 

클릭하면

 

맨위에 이클립스는 swt까지 포함된 이클립스 버전인데 저는 기존 이클립스에 swt만 추가하기 위해 하단에 내리면 SWT Binary and source를 다운받는다 bit는 이클립스 기본bit에 따라 다운받음

클릭하면

맨위에 이클립스는 swt까지 포함된 이클립스 버전인데 저는 기존 이클립스에 swt만 추가하기 위해 하단에 내리면 SWT Binary and source를 다운받는다 bit는 이클립스 기본bit에 따라 다운받음

방식1) Java 빌드경로 직접추가

   Jar파일 직접 추가 : 외부Jar추가->해당파일(swt.jar) 직접 선택

방식2) 클래스환경변수로 설정

메뉴에서 창-> 환경설정-> Java->Build Path-> Classpath Variables -> New 버튼

Name : SWT_LIB
Path : workspace폴더/wt-3.3-win32-win32-x86/swt.jar
 
Name : JFACE_LIB
Path : eclipse폴더/plugins/org.eclipse.jface_xxxxx.jar
 
Name : BOOT_LIB  ※ 요건 없어진듯
Path : eclipse폴더/plugins/org.eclipse.core.boot_xxxxx.jar
 
Name : RUNTIME_LIB
Path : eclipse폴더/plugins/org.eclipse.core.runtime_xxxxx.jar
 
Name : JFACETEXT_LIB
Path : eclipse폴더/plugins/org.eclipse.jface.text_xxxxx.jar
 
Name : TEXT_LIB
Path : eclipse폴더/plugins/org.eclipse.text_xxxxx.jar
 
Name : OSGI_LIB
Path : eclipse폴더/plugins/org.eclipse.osgi_xxxxx.jar

※ 구방식이라 일부 안되는것도 있음 특히 BOOT_LIB

개발을 하기위해서는 SWT -> JFace -> RCP 순으로 되어 있는데,  환경설정구성에서는 RCP가 JFace, SWT를 포함하고 있기 때문에 RCP환경만 설정하면 모두 사용이 가능하다.(RCP환경설정으로 모두 사용가능)

 

RCP환경설정에 앞서 이클립스는 2000년도부터 무수히 많은 버전을 만들어왔는데 문제는 버전별로 처리 가능한지 하기 위해 이중구성(IDE 환경과 RCP환경) 

 

흔하게 Java를 개발하기 위해서 보통 IDE통합환경을 보통 다운을 받아 설치한다.

ㅁ Target 설정

    1) Java Project 추가 : 이름은 (임의)RCP_Indigo_Target

 

구버전 Indigo RCP환경

※ 현재 어느 플랫폼으로 선택되어 있는지 확인이 가능 

 

필요에 따라 환경을 변경하면 됨

IDE 통합툴이지만 RCP플랫폼의 요소들을 가져와 설정되었기 때문에 SWT, Jface, RCP환경이 이거 하나로 됨

 

ㅁ 참고로 이클립스 명칭별 버전 확인

배포판

배포일

플랫폼 버전

프로젝트명

참여 프로젝트

의미

Photon

2018 6 27

4.8

광양자

Oxygen

2017 6 28

4.7

Oxygen projects

산소(O2)

Neon

2016 6 22

4.6

Neon projects

네온(Ne), 그리스어로 새롭다를 뜻하는 'neos'를 어원

Mars

2015 6 24

4.5

Mars projects

79

화성(라틴어)

Luna

2014 6 25

4.4

Luna projects

76

(라틴어)

Kepler

2013 6 26

4.3

Kepler projects

미정

케플러(천문학자)

Juno

2012 6 27

4.2

Juno projects

미정

주노(로마신화에서 피터의 누이이자 아내)

Indigo

2011 6 22

3.7

Indigo projects

62

남색(H의 다음문자)

Helios

2010 6 23

3.6

Helios projects

39

태양신

Galileo

2009 6 24

3.5

Galileo projects

33

목성 4대 위성의 발견자명

Ganymede

2008 6 25

3.4

Ganymede projects

23

목성의 4대 위성 중 하나로 태양계 최대의 위성

Europa

2007 6 29

3.3

Europa projects

20

목성의 4대 위성 중 하나

Callisto

2006 6 30

3.2

Callisto projects

10

목성의 4대 위성 중 하나

Eclipse 3.1

2005 6 28

3.1

Eclipse 3.0

2004 6 21

3.0



※ 참고 : ko.wikipedia.org/wiki/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)

 

ㅁ 구방식 SWT하나만 추가 방법

    참고 : dicws.tistory.com/118

 

[SWT] SWT만 설치사용(구방식)

ㅁ SWT 다운로드 과거에는 바로 swt.jar만 가져올 수 있게 했는데, 여러단계를 거쳐야 들어갈 수 있게 되어 있다 먼저 SWT사이트를 접속해보자: http://www.eclipse.org/swt/ 클릭하면 맨위에 이클립스는 swt

dicws.tistory.com

 

'IT > RCP' 카테고리의 다른 글

[JFace] 뷰어와 뷰어 프레임 워크  (0) 2020.12.26
[RCP] RCP 기본생성 방법  (0) 2020.12.20
[RCP] 사전 준비 및 주요 용어  (0) 2020.12.20
[SWT] 윈도우 레지스트리  (0) 2020.12.19
[SWT] Win32 OLE  (0) 2020.12.19

클립스는 개발툴로 매우 좋은 도구라 생각되어진다. 대규모 프로젝트시 현존하는 개발툴은

거의 이클립스 기반으로 이루어져 있다해도 과언이 아니라 생각되어진다.

이에 이클립스를 잘사용하는 방법말고 추가 나만의 도구를 개발하여 더욱더 좋은 빠른 개발을 하고자 정리하게 되었고 이에 정리과정을 한번 다시 적어볼까 합니다.

총 3개의 단개로 진행됩니다.

       SWT(Standard Widget Toolkit)->JFace(모델기반)->RCP(Platform)

궁극적 목적은 RCP(Rich Client Platform)으로 이클립스에 추가 도구를 만들기 위함으로 진행해보고자 합니다.

 SWT는 각 컴포넌트를 기본적으로 사용할줄 아는게 목적이고,  이를 JFace를 통하여 모델화시키고 RCP 플렛폼을 만들어 이클립스의 도구 또는 Stand-Alone 프로그램을 구현하고자 합니다.

 

ㅁ RCP 화면구성 

퍼스펙티브 : 일종에 작업책상으로 보면 된다. 여러 작업공간분리 하려고 한다.

                   예를 들면 C프로그램작성, 데이터베이스용, Java, PHP 등등 작업공간

-  : 특정 목적으로 처리할수 있는 공구라 생각하면 된다.

       예를 들면 파일목록을 보는 파일관리자, 프로젝트를 관리하는 프로젝트 관리자 기타 특성, 콘솔 등등이 다 사용할 수 있는 공구라 생각하면 된다.

 - 에디터 : 실제 뭔가를 작업하고 처리하는 부분이라 생각하면 된다. 주로 메인작업을 하는 공간

'IT > RCP' 카테고리의 다른 글

[RCP] RCP 기본생성 방법  (0) 2020.12.20
[RCP] 개발 환경설정  (0) 2020.12.20
[SWT] 윈도우 레지스트리  (0) 2020.12.19
[SWT] Win32 OLE  (0) 2020.12.19
[SWT] 클립보드  (0) 2020.12.19

+ Recent posts