В настоящее время проект в основном создал версию. Хотя это незначительная работа, я все же хочу разобраться в используемых вещах. В конце концов, я немного научился. Во-первых, это использование 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. Я чувствую, что организация является. немного сбивает с толку. Этот пакет также импортируется. Кроме того, в зависимости от версии могут возникать ошибки импорта пакетов. Обратите внимание на версию.
Следующий код представляет собой создание Tableview, который цитируется из «Eclipse Getting Started to Mastery».
+ развернуть исходную копию в буфер обмена?
импортировать org.eclipse.jface.viewers.ColumnWeightData;
импортировать org.eclipse.jface.viewers.TableLayout;
импортировать org.eclipse.jface.viewers.TableViewer;
импортировать org.eclipse.swt.SWT;
импортировать org.eclipse.swt.layout.FillLayout;
импортировать org.eclipse.swt.widgets.Display;
импортировать org.eclipse.swt.widgets.Shell;
импортировать org.eclipse.swt.widgets.Table;
импортировать org.eclipse.swt.widgets.TableColumn;
общественный класс TableViewer1 {
public static void main(String[] args) {
новый TableViewer1().open();
}
общественная недействительность open() {
окончательный дисплей display = новый дисплей();
окончательная оболочка оболочки = новая оболочка();
Shell.setSize(500, 150);
//---------------------------------------------
Shell.setLayout(новый FillLayout());
// Шаг первый: создаем объект TableViewer. Стиль: MULTI допускает множественный выбор, H_SCROLL имеет горизонтальные полосы прокрутки, V_SCROLL имеет вертикальные полосы прокрутки, BORDER имеет границы, а FULL_SELECTION выбирает всю строку.
TableViewer tv = новый TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Шаг 2. Установите метод макета через объект Table, содержащийся в таблице
Таблица table = tv.getTable();
table.setHeaderVisible(true); // Отображение заголовка таблицы
table.setLinesVisible(true); // Отображение строк таблицы
TableLayout layout = new TableLayout(); // Макет, предназначенный для таблиц.
таблица.setLayout(макет);
// Шаг 3. Создайте столбцы таблицы с помощью класса TableColumn
layout.addColumnData(new ColumnWeightData(13));//ширина столбца ID 13 пикселей
новый TableColumn(таблица, SWT.NONE).setText("Идентификационный номер");
макет.addColumnData(новый ColumnWeightData(40));
новый TableColumn(таблица, SWT.NONE).setText("Имя");
макет.addColumnData(новый ColumnWeightData(20));
новый TableColumn(таблица, SWT.NONE).setText("Пол");
макет.addColumnData(новый ColumnWeightData(20));
новый TableColumn(таблица, SWT.NONE).setText("Возраст");
макет.addColumnData(новый ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("Время создания записи");
// Шаг 4. Настройка внутреннего контейнера и тегера
tv.setContentProvider(новый TableViewerContentProvider());
tv.setLabelProvider(новый TableViewerLabelProvider());
// Шаг 5: Используйте метод setInput TableViewer для ввода данных в таблицу
Данные объекта = PeopleFactory.getPeoples();
tv.setInput(данные);
//---------------------------------------------
оболочка.открыть();
в то время как (!shell.isDispose()) {
если (!display.readAndDispatch())
дисплей.сон();
}
дисплей.dispose();
}
}
импортировать org.eclipse.jface.viewers.ColumnWeightData;
импортировать org.eclipse.jface.viewers.TableLayout;
импортировать org.eclipse.jface.viewers.TableViewer;
импортировать org.eclipse.swt.SWT;
импортировать org.eclipse.swt.layout.FillLayout;
импортировать org.eclipse.swt.widgets.Display;
импортировать org.eclipse.swt.widgets.Shell;
импортировать org.eclipse.swt.widgets.Table;
импортировать org.eclipse.swt.widgets.TableColumn;
общественный класс TableViewer1 {
public static void main(String[] args) {
новый TableViewer1().open();
}
общественная недействительность open() {
окончательный дисплей display = новый дисплей();
окончательная оболочка оболочки = новая оболочка();
Shell.setSize(500, 150);
//---------------------------------------------
Shell.setLayout(новый FillLayout());
// Шаг первый: создаем объект TableViewer. Стиль: MULTI допускает множественный выбор, H_SCROLL имеет горизонтальные полосы прокрутки, V_SCROLL имеет вертикальные полосы прокрутки, BORDER имеет границы, а FULL_SELECTION выбирает всю строку.
TableViewer tv = новый TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Шаг 2. Установите метод макета через объект Table, содержащийся в таблице
Таблица table = tv.getTable();
table.setHeaderVisible(true); // Отображение заголовка таблицы
table.setLinesVisible(true); // Отображение строк таблицы
TableLayout layout = new TableLayout(); // Макет, предназначенный для таблиц.
таблица.setLayout(макет);
// Шаг 3. Создайте столбцы таблицы с помощью класса TableColumn
layout.addColumnData(new ColumnWeightData(13));//ширина столбца ID 13 пикселей
новый TableColumn(таблица, SWT.NONE).setText("Идентификационный номер");
макет.addColumnData(новый ColumnWeightData(40));
новый TableColumn(таблица, SWT.NONE).setText("Имя");
макет.addColumnData(новый ColumnWeightData(20));
новый TableColumn(таблица, SWT.NONE).setText("Пол");
макет.addColumnData(новый ColumnWeightData(20));
новый TableColumn(таблица, SWT.NONE).setText("Возраст");
макет.addColumnData(новый ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("Время создания записи");
// Шаг 4. Настройка внутреннего контейнера и тегера
tv.setContentProvider(новый TableViewerContentProvider());
tv.setLabelProvider(новый TableViewerLabelProvider());
// Шаг 5: Используйте метод setInput TableViewer для ввода данных в таблицу
Данные объекта = PeopleFactory.getPeoples();
tv.setInput(данные);
//---------------------------------------------
оболочка.открыть();
в то время как (!shell.isDispose()) {
если (!display.readAndDispatch())
дисплей.сон();
}
дисплей.dispose();
}
}
Ниже приведены два предоставленных класса. Если код этих двух классов небольшой и сервис представляет собой одну таблицу, их можно записать как внутренние классы:
просмотреть обычную копию в буфер обмена, распечатать?
импортировать java.util.List;
импортировать org.eclipse.jface.viewers.ISstructuredContentProvider;
импортировать org.eclipse.jface.viewers.Viewer;
//Внутренний контейнер. Этот класс фильтрует и преобразует данные, вводимые в форму.
//Этот класс имеет три метода для реализации интерфейса, среди которых getElements является основным методом, два других метода используются редко, достаточно просто пустой реализации
публичный класс TableViewerContentProvider реализует IStructuredContentProvider {
// Фильтруем и преобразуем входной набор данных в таблицу.
// Все наборы входных данных должны быть преобразованы в массивы. Каждый элемент массива представляет собой объект-сущность, представляющий собой запись в таблице.
public Object[] getElements (элемент Object) {
//Элемент параметра — это входной объект, вводимый через setInput(Object input). В этом примере входными данными для setInput является коллекция List.
if (element instanceof List)//Добавляем решение типа List
return ((List) element).toArray() // Преобразуем список набора данных в массив.
еще
return new Object[0]; //Если это не тип списка, верните пустой массив
}
// Этот метод срабатывает, когда объект TableViewer закрывается
общественный недействительный располагать () {
}
// Этот метод срабатывает, когда TableViewer снова вызывает setInput()
public void inputChanged (Viewer v, Object oldInput, Object newInput) {
}
}
импортировать java.util.List;
импортировать org.eclipse.jface.viewers.ISstructuredContentProvider;
импортировать org.eclipse.jface.viewers.Viewer;
//Внутренний контейнер. Этот класс фильтрует и преобразует данные, вводимые в форму.
//Этот класс имеет три метода для реализации интерфейса, среди которых getElements является основным методом, два других метода используются редко, достаточно просто пустой реализации
публичный класс TableViewerContentProvider реализует IStructuredContentProvider {
// Фильтруем и преобразуем входной набор данных в таблицу.
// Все наборы входных данных должны быть преобразованы в массивы. Каждый элемент массива представляет собой объект-сущность, представляющий собой запись в таблице.
public Object[] getElements (элемент Object) {
//Элемент параметра — это входной объект, вводимый через setInput(Object input). В этом примере входными данными для setInput является коллекция List.
if (element instanceof List)//Добавляем решение типа List
return ((List) element).toArray() // Преобразуем список набора данных в массив.
еще
return new Object[0]; //Если это не тип списка, верните пустой массив
}
// Этот метод срабатывает, когда объект TableViewer закрывается
общественная недействительность располагать () {
}
// Этот метод срабатывает, когда TableViewer снова вызывает setInput()
public void inputChanged (Viewer v, Object oldInput, Object newInput) {
}
}
просмотреть обычную копию в буфер обмена, распечатать?
импортировать org.eclipse.jface.viewers.ILabelProviderListener;
импортировать org.eclipse.jface.viewers.ITableLabelProvider;
импортировать org.eclipse.swt.graphics.Image;
// Таггер. Если внутренний контейнер обрабатывает ввод набора данных в форму,
//Затем теггер обрабатывает и преобразует один объект сущности в наборе данных, а затем теггер определяет, в каком столбце таблицы отображаются поля объекта сущности.
публичный класс TableViewerLabelProvider реализует ITableLabelProvider {
//Создаем несколько изображений
личное изображение[] images = новое изображение[] {
новое изображение(null, "icons/refresh.gif"),
новое изображение(null, "icons/star.jpg"),
новое изображение(null, "icons/moon.jpg") };
// Этот метод определяет, какой текст отображается в каждом столбце таблицы для записей данных.
//Параметр элемента — это объект класса сущности. col — номер столбца, который в данный момент устанавливается, 0 — первый столбец.
public String getColumnText (элемент Object, int col) {
PeopleEntity o = (PeopleEntity) элемент // преобразование типа;
if (col == 0)//Какие данные должны отображаться в первом столбце?
вернуть o.getId().toString();
если (столбец == 1)
вернуть o.getName();
если (столбец == 2)
return o.isSex() ? «Мужской»: «Женский»;
если (столбец == 3)
return String.valueOf(o.getAge()); // Преобразование типа int в тип String
если (столбец == 4)
return o.getCreateDate().toString();
return null // Метод может возвращать нулевое значение;
}
// Метод getColumnText используется для отображения текста, а этот метод — для отображения изображений.
public Image getColumnImage (элемент Object, int col) {
PeopleEntity o = элемент (PeopleEntity);
// Разрешить отображать изображения только в записи «Chen Gang»
if (o.getName().equals("Чэнь Ган") || o.getName().equals("Чжоу Юэ")) {
if (col == 0)//Картинка, которая будет отображаться в первом столбце
вернуть изображения[0];
if (col == 2)//Отображать разные значки в зависимости от пола
вернуть o.isSex() ? images[1] : images[2];
}
return null // Метод может возвращать нулевое значение;
}
общественный недействительный располагать () {
// Не забываем принцип SWT-компонентов: создай сам и выпусти сам
for (Изображение: изображения) {
изображение.dispose();
}
}
//-------------Следующие методы используются редко, поэтому пока не беспокойтесь о них и позвольте им быть реализованными пустыми ------------- ----
public boolean isLabelProperty (элемент Object, свойство String) {
вернуть ложь;
}
public void addListener (прослушиватель ILabelProviderListener) {
}
public void RemoveListener (прослушиватель ILabelProviderListener) {
}
}
импортировать org.eclipse.jface.viewers.ILabelProviderListener;
импортировать org.eclipse.jface.viewers.ITableLabelProvider;
импортировать org.eclipse.swt.graphics.Image;
// Таггер. Если внутренний контейнер обрабатывает ввод набора данных в форму,
//Затем теггер обрабатывает и преобразует один объект сущности в наборе данных, а затем теггер определяет, в каком столбце таблицы отображаются поля объекта сущности.
публичный класс TableViewerLabelProvider реализует ITableLabelProvider {
//Создаем несколько изображений
личное изображение[] images = новое изображение[] {
новое изображение(null, "icons/refresh.gif"),
новое изображение(null, "icons/star.jpg"),
новое изображение(null, "icons/moon.jpg") };
// Этот метод определяет, какой текст отображается в каждом столбце таблицы для записей данных.
//Параметр элемента — это объект класса сущности. col — номер столбца, который в данный момент устанавливается, 0 — первый столбец.
public String getColumnText (элемент Object, int col) {
PeopleEntity o = (PeopleEntity) элемент // преобразование типа;
if (col == 0)//Какие данные должны отображаться в первом столбце?
вернуть o.getId().toString();
если (столбец == 1)
вернуть o.getName();
если (столбец == 2)
return o.isSex() ? «Мужской»: «Женский»;
если (столбец == 3)
return String.valueOf(o.getAge()); // Преобразование типа int в тип String
если (столбец == 4)
return o.getCreateDate().toString();
return null // Метод может возвращать нулевое значение;
}
// Метод getColumnText используется для отображения текста, а этот метод — для отображения изображений.
public Image getColumnImage (элемент Object, int col) {
PeopleEntity o = элемент (PeopleEntity);
// Разрешить отображать изображения только в записи «Chen Gang»
if (o.getName().equals("Чэнь Ган") || o.getName().equals("Чжоу Юэ")) {
if (col == 0)//Картинка, которая будет отображаться в первом столбце
вернуть изображения[0];
if (col == 2)//Отображать разные значки в зависимости от пола
вернуть o.isSex() ? images[1] : images[2];
}
return null // Метод может возвращать нулевое значение;
}
общественный недействительный располагать () {
// Не забываем принцип SWT-компонентов: создай сам и выпусти сам
for (Изображение изображения: изображения) {
изображение.dispose();
}
}
//-------------Следующие методы используются редко, поэтому пока не беспокойтесь о них и позвольте им быть реализованными пустыми ------------- ----
public boolean isLabelProperty (элемент Object, свойство String) {
вернуть ложь;
}
public void addListener (прослушиватель ILabelProviderListener) {
}
public void RemoveListener (прослушиватель ILabelProviderListener) {
}
}
Другой — класс сущности. Здесь мы просто пишем сущность. Данные здесь можно прочитать из базы данных, но затем обратите внимание на тип контейнера, используемый для хранения данных.
И обратите внимание на преобразование типов.
просмотреть обычную копию в буфер обмена, распечатать?
импортировать java.util.Date;
//Этот класс содержит пять переменных разных типов данных, соответствующих пяти полям в таблице базы данных. Переменная имеет приватный тип, то есть она может только
//Доступ к которым осуществляется из внутреннего кода класса, внешний мир может получить к ним доступ только через соответствующие методы Setter/Geter этих переменных.
общественный класс PeopleEntity {
Private Long id; //Уникальный идентификационный код, часто автоматически увеличивающийся столбец идентификатора в базе данных;
частное имя строки; // имя;
частный логический пол // Пол: истинный мужской, ложный женский;
частный int возраст // Возраст;
частная дата createDate //Дата создания записи. Тип даты — java.util.Date, а не java.sql.Date.
// Следующий код представляет собой метод Setter/Geter каждого поля. Обратитесь к разделу 3.5.2, эти методы могут быть автоматически сгенерированы в Eclipse.
public Long getId() { возвращаемый идентификатор;}
public void setId(Long long1) {id = long1;}
public String getName() {возвращенное имя;}
public void setName (String string) {name = string;}
public boolean isSex() { вернуть секс;}
public void setSex(boolean sex) { this.sex = sex }
public int getAge() {возвращаемый возраст;}
общественный недействительный setAge (int i) {возраст = я;}
общественная дата getCreateDate() {return createDate;}
public void setCreateDate (Дата дата) {createDate = дата;}
}
импортировать java.util.Date;
//Этот класс содержит пять переменных разных типов данных, соответствующих пяти полям в таблице базы данных. Переменная имеет приватный тип, то есть она может только
//Доступ к которым осуществляется из внутреннего кода класса, внешний мир может получить к ним доступ только через соответствующие методы Setter/Geter этих переменных.
общественный класс PeopleEntity {
Private Long id; //Уникальный идентификационный код, часто автоматически увеличивающийся столбец идентификатора в базе данных;
частное имя строки; // имя;
частный логический пол //Пол: истинный мужской, ложный женский;
частный int возраст // Возраст;
частная дата createDate; //Дата создания записи. Тип даты — java.util.Date, а не java.sql.Date.
// Следующий код представляет собой метод Setter/Geter каждого поля. Обратитесь к разделу 3.5.2, эти методы могут быть автоматически сгенерированы в Eclipse.
public Long getId() { возвращаемый идентификатор;}
public void setId(Long long1) {id = long1;}
public String getName() {возвращенное имя;}
public void setName (String string) {name = string;}
public boolean isSex() { вернуть секс;}
public void setSex(boolean sex) { this.sex = sex }
public int getAge() {возвращаемый возраст;}
общественный недействительный setAge (int i) {возраст = я;}
общественная дата getCreateDate() {return createDate;}
public void setCreateDate (Дата дата) {createDate = дата;}
}
Кроме того, имеется инкапсулированный интерфейс для получения данных:
просмотреть обычную копию в буфер обмена, распечатать?
импортировать java.util.ArrayList;
импортировать java.util.Date;
импортировать java.util.List;
//Создаем фабрику для объектов PeopleEntity, создаем три объекта PeopleEntry и загружаем их в коллекцию List для возврата
общественный класс PeopleFactory {
public static List<PeopleEntity> getPeoples() { //Статический метод фабрики
List<PeopleEntity> list = новый ArrayList<PeopleEntity>();
{ // Первый объект класса сущности
PeopleEntity o = новый PeopleEntity();
o.setId(new Long(1));//Тип поля id определен как Long, поэтому его необходимо преобразовать
o.setName("Чэнь Ган");
о.setSex(истина);
о.setAge(28);
o.setCreateDate(new Date()); // Текущая дата
список.добавить(о);
}
{ // Второй объект класса сущности
PeopleEntity o = новый PeopleEntity();
o.setId(2L); //Используйте функцию автоматического бокса JDK5.0, чтобы сохранить преобразование из длинного объекта в длинный
o.setName("еженедельное чтение");
о.setSex(ложь);
о.setAge(18);
o.setCreateDate(новая дата());
список.добавить(о);
}
{ // Третий объект класса сущности
PeopleEntity o = новый PeopleEntity();
о.setId(3L);
o.setName("Чэнь Ченчен");
о.setSex(истина);
о.setAge(27);
o.setCreateDate(новая дата());
список.добавить(о);
}
список возврата;
}
}
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/youxigogo/archive/2009/12/30/5105179.aspx.
-