Das Projekt hat jetzt im Grunde eine Version hervorgebracht, obwohl es eine Randarbeit ist, aber ich möchte immer noch die verwendeten Dinge klären. Die erste ist die Verwendung von TableView. RWT ist eine Teilmenge von SWT. Daher implementiert RWT möglicherweise nicht alle Schnittstellen von SWT und ist auch nicht so vollständig wie SWT. Die Architektur der beiden ist unterschiedlich, was sich in der Anzeigeform und der Benutzeroberfläche widerspiegelt, aber die grundlegenden Bedienelemente sind immer noch dieselben. Hier lernen wir zunächst die Verwendung einiger gängiger Steuerelemente durch SWT.
Lassen Sie uns zunächst über die von SWT benötigten Bibliotheksdateien sprechen. Enthält: 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) Darüber hinaus enthält dieses Paket auch org.eclipse.core.runtime etwas verwirrend. Dieses Paket auch importieren. Darüber hinaus kann es je nach Version zu Fehlern beim Paketimport kommen. Bitte achten Sie auf die Version.
Der folgende Code ist die Erstellung von Tableview, zitiert aus „Eclipse Getting Started to Mastery“.
+ Quellansicht Plaincopy auf Clipboardprint erweitern?
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
öffentliche Klasse TableViewer1 {
public static void main(String[] args) {
neuer TableViewer1().open();
}
public void open() {
final Display display = new Display();
final Shell shell = new Shell();
shell.setSize(500, 150);
//-----------------
shell.setLayout(new FillLayout());
// Schritt eins: Erstellen Sie ein TableViewer-Objekt. Stil: MULTI ermöglicht Mehrfachauswahl, H_SCROLL hat horizontale Bildlaufleisten, V_SCROLL hat vertikale Bildlaufleisten, BORDER hat Ränder und FULL_SELECTION wählt die gesamte Zeile aus.
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Schritt 2: Legen Sie die Layoutmethode über das in der Tabelle enthaltene Table-Objekt fest
Tabelle table = tv.getTable();
table.setHeaderVisible(true); // Tabellenkopf anzeigen
table.setLinesVisible(true); // Tabellenzeilen anzeigen
TableLayout layout = new TableLayout(); // Layout für Tabellen
table.setLayout(layout);
// Schritt 3: Tabellenspalten mit der TableColumn-Klasse erstellen
layout.addColumnData(new ColumnWeightData(13));//ID-Spaltenbreite 13 Pixel
new TableColumn(table, SWT.NONE).setText("ID-Nummer");
layout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("Name");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Gender");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Age");
layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("Erstellungszeit des Datensatzes");
// Schritt 4: Innencontainer und Tagger einrichten
tv.setContentProvider(new TableViewerContentProvider());
tv.setLabelProvider(new TableViewerLabelProvider());
// Schritt 5: Verwenden Sie die setInput-Methode von TableViewer, um Daten in die Tabelle einzugeben
Objektdaten = PeopleFactory.getPeoples();
tv.setInput(data);
//-----------------
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
öffentliche Klasse TableViewer1 {
public static void main(String[] args) {
neuer TableViewer1().open();
}
public void open() {
final Display display = new Display();
final Shell shell = new Shell();
shell.setSize(500, 150);
//-----------------
shell.setLayout(new FillLayout());
// Schritt eins: Erstellen Sie ein TableViewer-Objekt. Stil: MULTI ermöglicht Mehrfachauswahl, H_SCROLL hat horizontale Bildlaufleisten, V_SCROLL hat vertikale Bildlaufleisten, BORDER hat Ränder und FULL_SELECTION wählt die gesamte Zeile aus.
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Schritt 2: Legen Sie die Layoutmethode über das in der Tabelle enthaltene Table-Objekt fest
Tabelle table = tv.getTable();
table.setHeaderVisible(true); // Tabellenkopf anzeigen
table.setLinesVisible(true); // Tabellenzeilen anzeigen
TableLayout layout = new TableLayout(); // Layout für Tabellen
table.setLayout(layout);
// Schritt 3: Tabellenspalten mit der TableColumn-Klasse erstellen
layout.addColumnData(new ColumnWeightData(13));//ID-Spaltenbreite 13 Pixel
new TableColumn(table, SWT.NONE).setText("ID-Nummer");
layout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("Name");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Gender");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Age");
layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("Erstellungszeit des Datensatzes");
// Schritt 4: Innencontainer und Tagger einrichten
tv.setContentProvider(new TableViewerContentProvider());
tv.setLabelProvider(new TableViewerLabelProvider());
// Schritt 5: Verwenden Sie die setInput-Methode von TableViewer, um Daten in die Tabelle einzugeben
Objektdaten = PeopleFactory.getPeoples();
tv.setInput(data);
//-----------------
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Im Folgenden sind die beiden bereitgestellten Klassen aufgeführt. Wenn der Code dieser beiden Klassen klein ist und der Dienst aus einer Tabelle besteht, können sie als interne Klassen geschrieben werden:
Klartext in Zwischenablage anzeigen und drucken?
java.util.List importieren;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
//Innenbehälter. Diese Klasse filtert und transformiert die in das Formular eingegebenen Daten.
//Diese Klasse verfügt über drei Methoden zum Implementieren der Schnittstelle, von denen getElements die Hauptmethode ist. Die anderen beiden Methoden werden selten verwendet. Eine leere Implementierung reicht aus
Die öffentliche Klasse TableViewerContentProvider implementiert IStructuredContentProvider {
// Filtern und transformieren Sie die Datensatzeingabe in die Tabelle.
// Alle Eingabedatensätze müssen in Arrays konvertiert werden. Jedes Array-Element ist ein Entitätsobjekt, das einen Datensatz in der Tabelle darstellt.
öffentliches Objekt[] getElements(Objektelement) {
//Das Parameterelement ist die Objekteingabe über setInput(Object input). In diesem Beispiel ist die Eingabe für setInput eine Listensammlung.
if (Elementinstanz der Liste) // Eine Beurteilung vom Typ Liste hinzufügen
return ((List) element).toArray(); // Konvertieren Sie den Datensatz List in ein Array
anders
return new Object[0]; //Wenn es kein Listentyp ist, ein leeres Array zurückgeben
}
// Diese Methode wird ausgelöst, wenn das TableViewer-Objekt geschlossen wird
public void dispose() {
}
// Diese Methode wird ausgelöst, wenn TableViewer erneut setInput() aufruft
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
}
java.util.List importieren;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
//Innenbehälter. Diese Klasse filtert und transformiert die in das Formular eingegebenen Daten.
//Diese Klasse verfügt über drei Methoden zum Implementieren der Schnittstelle, von denen getElements die Hauptmethode ist. Die anderen beiden Methoden werden selten verwendet. Eine leere Implementierung reicht aus
Die öffentliche Klasse TableViewerContentProvider implementiert IStructuredContentProvider {
// Filtern und transformieren Sie die Datensatzeingabe in die Tabelle.
// Alle Eingabedatensätze müssen in Arrays konvertiert werden. Jedes Array-Element ist ein Entitätsobjekt, das einen Datensatz in der Tabelle darstellt.
öffentliches Objekt[] getElements(Objektelement) {
//Das Parameterelement ist die Objekteingabe über setInput(Object input). In diesem Beispiel ist die Eingabe für setInput eine Listensammlung.
if (Elementinstanz der Liste) // Eine Beurteilung vom Typ Liste hinzufügen
return ((List) element).toArray(); // Konvertieren Sie die Datensatzliste in ein Array
anders
return new Object[0]; //Wenn es kein Listentyp ist, ein leeres Array zurückgeben
}
// Diese Methode wird ausgelöst, wenn das TableViewer-Objekt geschlossen wird
public void dispose() {
}
// Diese Methode wird ausgelöst, wenn TableViewer erneut setInput() aufruft
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
}
Klartext in Zwischenablage anzeigen und drucken?
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;
//Tagger. Wenn der innere Container die in das Formular eingegebenen Datensätze verarbeitet,
//Dann verarbeitet und transformiert der Tagger ein einzelnes Entitätsobjekt im Datensatz und bestimmt, in welcher Spalte der Tabelle die Felder im Entitätsobjekt angezeigt werden.
Die öffentliche Klasse TableViewerLabelProvider implementiert ITableLabelProvider {
//Erstelle mehrere Bilder
privates Bild[] Bilder = neues Bild[] {
neues Bild(null, „icons/refresh.gif“),
neues Bild(null, „icons/star.jpg“),
neues Bild(null, "icons/moon.jpg") };
// Diese Methode bestimmt, welcher Text in jeder Spalte der Tabelle für Datensätze angezeigt wird.
//Der Elementparameter ist ein Entitätsklassenobjekt. col ist die Spaltennummer der aktuell einzustellenden Spalte, 0 ist die erste Spalte.
public String getColumnText(Object element, int col) {
PeopleEntity o = (PeopleEntity) element; // Typkonvertierung
if (col == 0)//Welche Daten sollen in der ersten Spalte angezeigt werden?
return o.getId().toString();
if (col == 1)
return o.getName();
if (col == 2)
return o.isSex() ? "Male" : "Female";
if (col == 3)
return String.valueOf(o.getAge()); // Int-Typ in String-Typ konvertieren
if (col == 4)
return o.getCreateDate().toString();
return null; // Methode kann einen Nullwert zurückgeben
}
// Die getColumnText-Methode wird zum Anzeigen von Text und diese Methode zum Anzeigen von Bildern verwendet.
öffentliches Bild getColumnImage(Object element, int col) {
PeopleEntity o = (PeopleEntity) element;
// Lassen Sie die Aufnahme „Chen Gang“ nur Bilder anzeigen
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//Das Bild, das in der ersten Spalte angezeigt werden soll
Bilder zurückgeben[0];
if (col == 2)//Anzeige verschiedener Symbole basierend auf dem Geschlecht
return o.isSex() ? images[1] : images[2];
}
return null; // Methode kann einen Nullwert zurückgeben
}
public void dispose() {
// Vergessen Sie nicht das Prinzip der SWT-Komponenten: Erstellen Sie es selbst und veröffentlichen Sie es selbst
for (Bild Bild: Bilder) {
image.dispose();
}
}
//-------------Die folgenden Methoden werden selten verwendet, also machen Sie sich vorerst keine Sorgen und lassen Sie sie leer implementieren------------- ----
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void addListener(ILabelProviderListener listener) {
}
public void removeListener(ILabelProviderListener listener) {
}
}
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;
//Tagger. Wenn der innere Container die in das Formular eingegebenen Datensätze verarbeitet,
//Dann verarbeitet und transformiert der Tagger ein einzelnes Entitätsobjekt im Datensatz und bestimmt, in welcher Spalte der Tabelle die Felder im Entitätsobjekt angezeigt werden.
Die öffentliche Klasse TableViewerLabelProvider implementiert ITableLabelProvider {
//Mehrere Bilder erstellen
privates Bild[] Bilder = neues Bild[] {
neues Bild(null, „icons/refresh.gif“),
neues Bild(null, „icons/star.jpg“),
neues Bild(null, "icons/moon.jpg") };
// Diese Methode bestimmt, welcher Text in jeder Spalte der Tabelle für Datensätze angezeigt wird.
//Der Elementparameter ist ein Entitätsklassenobjekt. col ist die Spaltennummer der aktuell einzustellenden Spalte, 0 ist die erste Spalte.
public String getColumnText(Object element, int col) {
PeopleEntity o = (PeopleEntity) element; // Typkonvertierung
if (col == 0)//Welche Daten sollen in der ersten Spalte angezeigt werden?
return o.getId().toString();
if (col == 1)
return o.getName();
if (col == 2)
return o.isSex() ? "Male" : "Female";
if (col == 3)
return String.valueOf(o.getAge()); // Int-Typ in String-Typ konvertieren
if (col == 4)
return o.getCreateDate().toString();
return null; // Methode kann einen Nullwert zurückgeben
}
// Die getColumnText-Methode wird zum Anzeigen von Text und diese Methode zum Anzeigen von Bildern verwendet.
öffentliches Bild getColumnImage(Object element, int col) {
PeopleEntity o = (PeopleEntity) element;
// Lassen Sie die Aufnahme „Chen Gang“ nur Bilder anzeigen
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//Das Bild, das in der ersten Spalte angezeigt werden soll
Bilder zurückgeben[0];
if (col == 2)//Anzeige verschiedener Symbole basierend auf dem Geschlecht
return o.isSex() ? images[1] : images[2];
}
return null; // Methode kann einen Nullwert zurückgeben
}
public void dispose() {
// Vergessen Sie nicht das Prinzip der SWT-Komponenten: Erstellen Sie es selbst und veröffentlichen Sie es selbst
for (Bild Bild: Bilder) {
image.dispose();
}
}
//-------------Die folgenden Methoden werden selten verwendet, also machen Sie sich vorerst keine Sorgen und lassen Sie sie leer implementieren------------- ----
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void addListener(ILabelProviderListener listener) {
}
public void removeListener(ILabelProviderListener listener) {
}
}
Die andere ist die Entitätsklasse. Hier schreiben wir einfach eine Entität. Die Daten können hier aus der Datenbank gelesen werden, achten dann aber auf den Containertyp, der zum Speichern der Daten verwendet wird.
Und achten Sie auf die Typkonvertierung.
Klartext in Zwischenablage anzeigen und drucken?
import java.util.Date;
//Diese Klasse enthält fünf Variablen unterschiedlichen Datentyps, die fünf Feldern in der Datenbanktabelle entsprechen. Die Variable ist vom privaten Typ, das heißt, sie kann nur
// Zugriff über den internen Code der Klasse, die Außenwelt kann nur über die entsprechenden Setter/Geter-Methoden dieser Variablen darauf zugreifen.
öffentliche Klasse PeopleEntity {
private Long id; //Eindeutiger Identifikationscode, oft eine automatisch inkrementierende ID-Spalte in der Datenbank
privater String-Name; //Name
privates boolesches Geschlecht; //Geschlecht wahr männlich, falsch weiblich
privates int Alter; //Alter
private Date createDate; //Das Erstellungsdatum des Datensatzes. Der Datumstyp ist java.util.Date, nicht java.sql.Date
//Der folgende Code ist die Setter/Geter-Methode jedes Feldes. Siehe Abschnitt 3.5.2. Diese Methoden können in Eclipse automatisch generiert werden.
public Long getId() { return id;}
public void setId(Long long1) {id = long1;}
öffentlicher String getName() {Rückgabename;}
public void setName(String string) {name = string;}
public boolean isSex() { return sex;}
public void setSex(boolean sex) { this.sex = sex;
public int getAge() {return age;}
public void setAge(int i) {age = i;}
öffentliches Datum getCreateDate() {return createDate;}
public void setCreateDate(Date date) {createDate = date;}
}
import java.util.Date;
//Diese Klasse enthält fünf Variablen unterschiedlichen Datentyps, die fünf Feldern in der Datenbanktabelle entsprechen. Die Variable ist vom privaten Typ, das heißt, sie kann nur
// Zugriff über den internen Code der Klasse, die Außenwelt kann nur über die entsprechenden Setter/Geter-Methoden dieser Variablen darauf zugreifen.
öffentliche Klasse PeopleEntity {
private Long id; //Eindeutiger Identifikationscode, oft eine automatisch inkrementierende ID-Spalte in der Datenbank
privater String-Name; //Name
privates boolesches Geschlecht; //Geschlecht wahr männlich, falsch weiblich
privates int Alter; //Alter
private Date createDate; //Das Erstellungsdatum des Datensatzes. Der Datumstyp ist java.util.Date, nicht java.sql.Date
//Der folgende Code ist die Setter/Geter-Methode jedes Feldes. Siehe Abschnitt 3.5.2. Diese Methoden können in Eclipse automatisch generiert werden.
public Long getId() { return id;}
public void setId(Long long1) {id = long1;}
öffentlicher String getName() {Rückgabename;}
public void setName(String string) {name = string;}
public boolean isSex() { return sex;}
public void setSex(boolean sex) { this.sex = sex;
public int getAge() {return age;}
public void setAge(int i) {age = i;}
öffentliches Datum getCreateDate() {return createDate;}
public void setCreateDate(Date date) {createDate = date;}
}
Darüber hinaus gibt es eine gekapselte Schnittstelle zur Datenbeschaffung:
Klartext in Zwischenablage anzeigen und drucken?
import java.util.ArrayList;
import java.util.Date;
java.util.List importieren;
//Erstellen Sie eine Factory für PeopleEntity-Objekte, erstellen Sie drei PeopleEntry-Objekte und laden Sie sie zur Rückgabe in die List-Sammlung
öffentliche Klasse PeopleFactory {
öffentliche statische Liste<PeopleEntity> getPeoples() { //Statische Methode der Fabrik
List<PeopleEntity> list = new ArrayList<PeopleEntity>();
{ // Das erste Entitätsklassenobjekt
PeopleEntity o = new PeopleEntity();
o.setId(new Long(1));//Der Typ des ID-Feldes ist als Long definiert und muss daher konvertiert werden
o.setName("Chen Gang");
o.setSex(true);
o.setAge(28);
o.setCreateDate(new Date()); // Aktuelles Datum
list.add(o);
}
{ // Das zweite Entitätsklassenobjekt
PeopleEntity o = new PeopleEntity();
o.setId(2L); //Verwenden Sie die automatische Boxfunktion von JDK5.0, um die Konvertierung vom Long- in das Long-Objekt zu speichern
o.setName("wöchentliche Lektüre");
o.setSex(false);
o.setAge(18);
o.setCreateDate(new Date());
list.add(o);
}
{ // Das dritte Entitätsklassenobjekt
PeopleEntity o = new PeopleEntity();
o.setId(3L);
o.setName("Chen Changen");
o.setSex(true);
o.setAge(27);
o.setCreateDate(new Date());
list.add(o);
}
Rückgabeliste;
}
}
Dieser Artikel stammt aus dem CSDN-Blog. Bitte geben Sie beim Nachdruck die Quelle an: http://blog.csdn.net/youxigogo/archive/2009/12/30/5105179.aspx
-