이제 프로젝트는 기본적으로 버전을 제작했습니다. 비록 미미한 작업이지만 여전히 사용된 내용을 정리하고 싶기 때문에 조금 배웠습니다. 첫 번째는 TableView를 사용하는 것입니다. RWT는 SWT의 하위 집합입니다. 따라서 RWT는 SWT의 모든 인터페이스를 완벽하게 구현하지 못할 수도 있고 SWT만큼 완전하지도 않습니다. 둘의 아키텍처는 다르며 디스플레이 형식과 인터페이스에 반영되지만 기본 컨트롤은 여전히 동일합니다. 여기서는 먼저 SWT를 통해 몇 가지 일반적인 컨트롤을 사용하는 방법을 배웁니다.
먼저 SWT에 필요한 라이브러리 파일에 대해 이야기하겠습니다. 포함: org.eclipse.swt_3.xxjar org.eclipse.jface_3.xxjar
org.eclipse.core.runtime_3.xxjar org.eclipse.ui.workbench_3.xxjar (org.eclipse.equinox.common_3.xxjar) 또한 이 패키지에는 org.eclipse.core.runtime도 포함되어 있는 것 같습니다. 약간 혼란스럽습니다. 이 패키지도 가져옵니다. 또한, 버전에 따라 패키지 가져오기 오류가 발생할 수 있으니 주의하시기 바랍니다.
다음 코드는 "Eclipse Getting Started to Mastery"에서 인용한 Tableview의 생성입니다.
+ sourceview plaincopy를 클립보드 인쇄로 확장하시겠습니까?
org.eclipse.jface.viewers.ColumnWeightData 가져오기;
org.eclipse.jface.viewers.TableLayout 가져오기;
import org.eclipse.jface.viewers.TableViewer;
org.eclipse.swt.SWT 가져오기;
org.eclipse.swt.layout.FillLayout 가져오기;
import org.eclipse.swt.widgets.Display;
org.eclipse.swt.widgets.Shell 가져오기;
org.eclipse.swt.widgets.Table 가져오기;
import org.eclipse.swt.widgets.TableColumn;
공개 클래스 TableViewer1 {
공개 정적 무효 메인(String[] args) {
새로운 TableViewer1().open();
}
공개 무효 공개() {
최종 디스플레이 디스플레이 = new Display();
최종 쉘 쉘 = new Shell();
shell.setSize(500, 150);
//----------------------------------
shell.setLayout(new FillLayout());
// 1단계: TableViewer 개체를 만듭니다. 스타일: MULTI는 다중 선택을 허용하고, H_SCROLL에는 가로 스크롤 막대가 있고, V_SCROLL에는 세로 스크롤 막대가 있으며, BORDER에는 테두리가 있고, FULL_SELECTION은 전체 행을 선택합니다.
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// 2단계: 테이블에 포함된 Table 객체를 통해 레이아웃 방법 설정
테이블 테이블 = tv.getTable();
table.setHeaderVisible(true); // 테이블 헤더를 표시합니다.
table.setLinesVisible(true); // 테이블 라인을 표시합니다.
TableLayout 레이아웃 = new TableLayout(); // 테이블 전용 레이아웃
table.setLayout(레이아웃);
// 3단계: TableColumn 클래스를 사용하여 테이블 열 만들기
layout.addColumnData(new ColumnWeightData(13));//ID 열 너비 13픽셀
new TableColumn(테이블, SWT.NONE).setText("ID 번호");
레이아웃.addColumnData(new ColumnWeightData(40));
new TableColumn(테이블, SWT.NONE).setText("이름");
레이아웃.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("성별");
레이아웃.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("나이");
레이아웃.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("레코드 생성 시간");
// 4단계: 내부 컨테이너 및 태거 설정
tv.setContentProvider(new TableViewerContentProvider());
tv.setLabelProvider(new TableViewerLabelProvider());
// 5단계: TableViewer의 setInput 메소드를 사용하여 테이블에 데이터를 입력합니다.
객체 데이터 = PeopleFactory.getPeoples();
tv.setInput(데이터);
//----------------------------------
shell.open();
동안 (!shell.isDisposed()) {
if (!display.readAndDispatch())
디스플레이.수면();
}
디스플레이.dispose();
}
}
org.eclipse.jface.viewers.ColumnWeightData 가져오기;
org.eclipse.jface.viewers.TableLayout 가져오기;
import org.eclipse.jface.viewers.TableViewer;
org.eclipse.swt.SWT 가져오기;
org.eclipse.swt.layout.FillLayout 가져오기;
import org.eclipse.swt.widgets.Display;
org.eclipse.swt.widgets.Shell 가져오기;
org.eclipse.swt.widgets.Table 가져오기;
import org.eclipse.swt.widgets.TableColumn;
공개 클래스 TableViewer1 {
공개 정적 무효 메인(String[] args) {
새로운 TableViewer1().open();
}
공개 무효 공개() {
최종 디스플레이 디스플레이 = new Display();
최종 쉘 쉘 = new Shell();
shell.setSize(500, 150);
//----------------------------------
shell.setLayout(new FillLayout());
// 1단계: TableViewer 개체를 만듭니다. 스타일: MULTI는 다중 선택을 허용하고, H_SCROLL에는 가로 스크롤 막대가 있고, V_SCROLL에는 세로 스크롤 막대가 있으며, BORDER에는 테두리가 있고, FULL_SELECTION은 전체 행을 선택합니다.
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// 2단계: 테이블에 포함된 Table 객체를 통해 레이아웃 방법 설정
테이블 테이블 = tv.getTable();
table.setHeaderVisible(true); // 테이블 헤더를 표시합니다.
table.setLinesVisible(true); // 테이블 라인을 표시합니다.
TableLayout 레이아웃 = new TableLayout(); // 테이블 전용 레이아웃
table.setLayout(레이아웃);
// 3단계: TableColumn 클래스를 사용하여 테이블 열 만들기
layout.addColumnData(new ColumnWeightData(13));//ID 열 너비 13픽셀
new TableColumn(테이블, SWT.NONE).setText("ID 번호");
레이아웃.addColumnData(new ColumnWeightData(40));
new TableColumn(테이블, SWT.NONE).setText("이름");
레이아웃.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("성별");
레이아웃.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("나이");
레이아웃.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("레코드 생성 시간");
// 4단계: 내부 컨테이너 및 태거 설정
tv.setContentProvider(new TableViewerContentProvider());
tv.setLabelProvider(new TableViewerLabelProvider());
// 5단계: TableViewer의 setInput 메소드를 사용하여 테이블에 데이터를 입력합니다.
객체 데이터 = PeopleFactory.getPeoples();
tv.setInput(데이터);
//----------------------------------
shell.open();
동안 (!shell.isDisposed()) {
if (!display.readAndDispatch())
디스플레이.수면();
}
디스플레이.dispose();
}
}
다음은 제공되는 두 가지 클래스입니다. 이 두 클래스의 코드가 작고 서비스가 하나의 테이블인 경우 내부 클래스로 작성할 수 있습니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
java.util.List 가져오기;
import org.eclipse.jface.viewers.IStructuredContentProvider;
org.eclipse.jface.viewers.Viewer 가져오기;
//내부 컨테이너. 이 클래스는 양식에 입력된 데이터를 필터링하고 변환합니다.
//이 클래스에는 인터페이스를 구현하는 세 가지 메소드가 있습니다. 그 중 getElements가 기본 메소드이고 나머지 두 메소드는 거의 사용되지 않으며 빈 구현만으로 충분합니다.
공개 클래스 TableViewerContentProvider는 IStructuredContentProvider를 구현합니다.
// 테이블에 입력된 데이터 세트를 필터링하고 변환합니다.
// 모든 입력 데이터 세트는 배열로 변환되어야 합니다. 각 배열 요소는 테이블의 레코드인 엔터티 개체입니다.
공공 객체[] getElements(객체 요소) {
//매개변수 요소는 setInput(Object input)을 통해 입력된 객체 입력입니다. 이 예에서 setInput에 대한 입력은 List 컬렉션입니다.
if (element instanceof List)//List 유형 판단 추가
return ((List) element).toArray(); // 데이터 세트 List를 배열로 변환합니다.
또 다른
return new Object[0]; //List 유형이 아닌 경우 빈 배열을 반환합니다.
}
// TableViewer 개체가 닫힐 때 이 메서드가 트리거됩니다.
공개 무효 처리() {
}
// 이 메소드는 TableViewer가 setInput()을 다시 호출할 때 트리거됩니다.
공개 무효 inputChanged(뷰어 v, 개체 oldInput, 개체 newInput) {
}
}
java.util.List 가져오기;
import org.eclipse.jface.viewers.IStructuredContentProvider;
org.eclipse.jface.viewers.Viewer 가져오기;
//내부 컨테이너. 이 클래스는 양식에 입력된 데이터를 필터링하고 변환합니다.
//이 클래스에는 인터페이스를 구현하는 세 가지 메소드가 있습니다. 그 중 getElements가 기본 메소드이고 나머지 두 메소드는 거의 사용되지 않으며 빈 구현만으로 충분합니다.
공개 클래스 TableViewerContentProvider는 IStructuredContentProvider를 구현합니다.
// 테이블에 입력된 데이터 세트를 필터링하고 변환합니다.
// 모든 입력 데이터 세트는 배열로 변환되어야 합니다. 각 배열 요소는 테이블의 레코드인 엔터티 개체입니다.
공공 객체[] getElements(객체 요소) {
//매개변수 요소는 setInput(Object input)을 통해 입력된 객체 입력입니다. 이 예에서 setInput에 대한 입력은 List 컬렉션입니다.
if (element instanceof List)//List 유형 판단 추가
return ((List) element).toArray(); // 데이터 세트 List를 배열로 변환합니다.
또 다른
return new Object[0]; //List 유형이 아닌 경우 빈 배열을 반환합니다.
}
// TableViewer 개체가 닫힐 때 이 메서드가 트리거됩니다.
공개 무효 처리() {
}
// 이 메소드는 TableViewer가 setInput()을 다시 호출할 때 트리거됩니다.
공개 무효 inputChanged(뷰어 v, 개체 oldInput, 개체 newInput) {
}
}
일반 사본을 클립보드 인쇄로 보시겠습니까?
import org.eclipse.jface.viewers.ILabelProviderListener;
org.eclipse.jface.viewers.ITableLabelProvider 가져오기;
org.eclipse.swt.graphics.Image 가져오기;
//술래. 내부 컨테이너가 양식에 입력된 데이터 세트를 처리하는 경우,
//그런 다음 태거는 데이터 세트의 단일 엔터티 개체를 처리하고 변환하며, 태거는 엔터티 개체의 필드가 표시되는 테이블의 열을 결정합니다.
공개 클래스 TableViewerLabelProvider는 ITableLabelProvider를 구현합니다.
//여러 이미지 생성
개인 이미지[] 이미지 = 새 이미지[] {
새 이미지(null, "icons/refresh.gif"),
새 이미지(null, "icons/star.jpg"),
새 이미지(null, "icons/moon.jpg") };
// 이 메소드는 데이터 레코드에 대한 테이블의 각 열에 표시되는 텍스트를 결정합니다.
//요소 매개변수는 엔터티 클래스 객체입니다. col은 현재 설정하려는 컬럼의 컬럼 번호이고, 0은 첫 번째 컬럼이다.
공개 문자열 getColumnText(객체 요소, int col) {
PeopleEntity o = (PeopleEntity) 요소 // 유형 변환;
if (col == 0)//첫 번째 열에 어떤 데이터가 표시되어야 합니까?
return o.getId().toString();
if (열 == 1)
o.getName()을 반환합니다.
if (열 == 2)
return o.isSex() ? "남성": "여성";
if (열 == 3)
return String.valueOf(o.getAge()); // int 유형을 String 유형으로 변환합니다.
if (열 == 4)
return o.getCreateDate().toString();
return null; // 메서드는 null 값을 반환할 수 있습니다.
}
// getColumnText 메소드는 텍스트를 표시하는 데 사용되며 이 메소드는 그림을 표시하는 데 사용됩니다.
공개 이미지 getColumnImage(Object 요소, int col) {
PeopleEntity o = (PeopleEntity) 요소;
// "Chen Gang" 레코드에만 사진이 표시되도록 합니다.
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//첫 번째 열에 표시할 그림
이미지 반환[0];
if (col == 2)//성별에 따라 다른 아이콘 표시
return o.isSex() ? 이미지[1] : 이미지[2];
}
return null; // 메서드는 null 값을 반환할 수 있습니다.
}
공개 무효 처리() {
// SWT 구성 요소의 원칙을 잊지 마세요. 직접 만들고 릴리스하세요.
(이미지 이미지 : 이미지) {
image.dispose();
}
}
//---------------다음 메소드는 거의 사용되지 않으니 일단은 걱정하지 말고 빈칸으로 구현하자------------ ----
public boolean isLabelProperty(Object 요소, String 속성) {
거짓을 반환;
}
공공 무효 addListener(ILabelProviderListener 수신기) {
}
공공 무효 제거Listener(ILabelProviderListener 수신기) {
}
}
import org.eclipse.jface.viewers.ILabelProviderListener;
org.eclipse.jface.viewers.ITableLabelProvider 가져오기;
org.eclipse.swt.graphics.Image 가져오기;
//술래. 내부 컨테이너가 양식에 입력된 데이터 세트를 처리하는 경우,
//그런 다음 태거는 데이터 세트의 단일 엔터티 개체를 처리하고 변환하며, 태거는 엔터티 개체의 필드가 표시되는 테이블의 열을 결정합니다.
공개 클래스 TableViewerLabelProvider는 ITableLabelProvider를 구현합니다.
//여러 이미지 생성
개인 이미지[] 이미지 = 새 이미지[] {
새 이미지(null, "icons/refresh.gif"),
새 이미지(null, "icons/star.jpg"),
새 이미지(null, "icons/moon.jpg") };
// 이 메소드는 데이터 레코드에 대한 테이블의 각 열에 표시되는 텍스트를 결정합니다.
//요소 매개변수는 엔터티 클래스 객체입니다. col은 현재 설정하려는 컬럼의 컬럼 번호이고, 0은 첫 번째 컬럼이다.
공개 문자열 getColumnText(객체 요소, int col) {
PeopleEntity o = (PeopleEntity) 요소 // 유형 변환;
if (col == 0)//첫 번째 열에 어떤 데이터가 표시되어야 합니까?
return o.getId().toString();
if (열 == 1)
o.getName()을 반환합니다.
if (열 == 2)
return o.isSex() ? "남성": "여성";
if (열 == 3)
return String.valueOf(o.getAge()); // int 유형을 String 유형으로 변환합니다.
if (열 == 4)
return o.getCreateDate().toString();
return null; // 메서드는 null 값을 반환할 수 있습니다.
}
// getColumnText 메소드는 텍스트를 표시하는 데 사용되며 이 메소드는 그림을 표시하는 데 사용됩니다.
공개 이미지 getColumnImage(Object 요소, int col) {
PeopleEntity o = (PeopleEntity) 요소;
// "Chen Gang" 레코드에만 사진이 표시되도록 합니다.
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//첫 번째 열에 표시할 그림
이미지 반환[0];
if (col == 2)//성별에 따라 다른 아이콘 표시
return o.isSex() ? 이미지[1] : 이미지[2];
}
return null; // 메서드는 null 값을 반환할 수 있습니다.
}
공개 무효 처리() {
// SWT 구성 요소의 원칙을 잊지 마세요. 직접 만들고 릴리스하세요.
(이미지 이미지 : 이미지) {
image.dispose();
}
}
//---------------다음 메소드는 거의 사용되지 않으니 일단은 걱정하지 말고 빈칸으로 구현하자------------ ----
public boolean isLabelProperty(Object 요소, String 속성) {
거짓을 반환;
}
공공 무효 addListener(ILabelProviderListener 수신기) {
}
공공 무효 제거Listener(ILabelProviderListener 수신기) {
}
}
다른 하나는 엔터티 클래스입니다. 여기서는 간단히 엔터티를 작성합니다. 여기서 데이터는 데이터베이스에서 읽을 수 있지만 데이터를 저장하는 데 사용되는 컨테이너 유형에 주의하세요.
그리고 유형 변환에 주의하세요.
일반 사본을 클립보드 인쇄로 보시겠습니까?
java.util.Date 가져오기;
//이 클래스에는 데이터베이스 테이블의 5개 필드에 해당하는 다양한 데이터 유형의 5개 변수가 포함되어 있습니다. 변수는 개인 유형입니다. 즉,
//클래스의 내부 코드에 의해 액세스되며 외부 세계에서는 이러한 변수의 해당 Setter/Geter 메서드를 통해서만 액세스할 수 있습니다.
공개 클래스 PeopleEntity {
private Long id; //고유 식별 코드, 종종 데이터베이스에서 자동으로 증가하는 ID 열
개인 문자열 이름; //이름
개인 불리언 섹스; //성별 참 남성, 거짓 여성
개인 나이; //나이
private Date createDate; //레코드 생성 날짜입니다. 날짜 유형은 java.sql.Date가 아닌 java.util.Date입니다.
//다음 코드는 각 필드의 Setter/Geter 메소드입니다. 섹션 3.5.2를 참조하면 이러한 메소드는 Eclipse에서 자동으로 생성될 수 있습니다.
공개 Long getId() { 반환 ID;}
공개 무효 setId(Long long1) {id = long1;}
공개 문자열 getName() {반환 이름;}
공개 무효 setName(문자열 문자열) {이름 = 문자열;}
공개 부울 isSex() { 섹스를 반환합니다.}
공공 무효 setSex(부울 섹스) { this.sex = 섹스 }
public int getAge() {반환 연령;}
공개 무효 setAge(int i) {나이 = i;}
공개 날짜 getCreateDate() {return createDate;}
공개 무효 setCreateDate(날짜 날짜) {createDate = 날짜;}
}
java.util.Date 가져오기;
//이 클래스에는 데이터베이스 테이블의 5개 필드에 해당하는 다양한 데이터 유형의 5개 변수가 포함되어 있습니다. 변수는 개인 유형입니다. 즉,
//클래스의 내부 코드에 의해 액세스되며 외부 세계에서는 이러한 변수의 해당 Setter/Geter 메서드를 통해서만 액세스할 수 있습니다.
공개 클래스 PeopleEntity {
private Long id; //고유 식별 코드, 종종 데이터베이스에서 자동으로 증가하는 ID 열
개인 문자열 이름; //이름
개인 불리언 섹스; //성별 참 남성, 거짓 여성
개인 나이; //나이
private Date createDate; //레코드 생성 날짜입니다. 날짜 유형은 java.sql.Date가 아닌 java.util.Date입니다.
//다음 코드는 각 필드의 Setter/Geter 메소드입니다. 섹션 3.5.2를 참조하면 이러한 메소드는 Eclipse에서 자동으로 생성될 수 있습니다.
공개 Long getId() { 반환 ID;}
공개 무효 setId(Long long1) {id = long1;}
공개 문자열 getName() {반환 이름;}
공개 무효 setName(문자열 문자열) {이름 = 문자열;}
공개 부울 isSex() { 섹스를 반환합니다.}
공공 무효 setSex(부울 섹스) { this.sex = 섹스 }
public int getAge() {반환 연령;}
공개 무효 setAge(int i) {나이 = i;}
공개 날짜 getCreateDate() {return createDate;}
공개 무효 setCreateDate(날짜 날짜) {createDate = 날짜;}
}
또한 데이터를 얻기 위한 캡슐화된 인터페이스가 있습니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
import java.util.ArrayList;
java.util.Date 가져오기;
java.util.List 가져오기;
//PeopleEntity 개체에 대한 팩토리를 만들고 세 개의 PeopleEntry 개체를 만든 다음 이를 List 컬렉션에 로드하여 반환합니다.
공개 클래스 PeopleFactory {
public static List<PeopleEntity> getPeoples() { //팩토리의 정적 메소드
List<PeopleEntity> list = new ArrayList<PeopleEntity>();
{ // 첫 번째 엔터티 클래스 객체
PeopleEntity o = 새로운 PeopleEntity();
o.setId(new Long(1));//id 필드의 유형이 Long으로 정의되어 있으므로 변환이 필요합니다.
o.setName("첸갱");
o.setSex(true);
o.setAge(28);
o.setCreateDate(new Date()); // 현재 날짜
목록.추가(o);
}
{ // 두 번째 엔터티 클래스 객체
PeopleEntity o = 새로운 PeopleEntity();
o.setId(2L); //JDK5.0의 자동 boxing 기능을 사용하여 long 객체에서 Long 객체로의 변환을 저장합니다.
o.setName("주간 독서");
o.setSex(false);
o.setAge(18);
o.setCreateDate(new Date());
목록.추가(o);
}
{ // 세 번째 엔터티 클래스 객체
PeopleEntity o = 새로운 PeopleEntity();
o.setId(3L);
o.setName("첸 변경됨");
o.setSex(true);
o.setAge(27);
o.setCreateDate(new Date());
목록.추가(o);
}
반환 목록;
}
}
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/youxigogo/archive/2009/12/30/5105179.aspx
-