Proyek ini pada dasarnya telah menghasilkan sebuah versi sekarang. Meskipun ini adalah pekerjaan kecil, saya masih ingin memilah-milah hal-hal yang digunakan. Yang pertama adalah penggunaan TableView. RWT adalah bagian dari SWT. Oleh karena itu, RWT mungkin tidak sepenuhnya mengimplementasikan semua antarmuka SWT, juga tidak selengkap SWT. Arsitektur keduanya berbeda, tercermin dari bentuk tampilan dan antarmuka, namun kontrol dasarnya masih sama. Di sini pertama-tama kita mempelajari penggunaan beberapa kontrol umum melalui SWT.
Pertama, mari kita bicara tentang file perpustakaan yang dibutuhkan oleh SWT. Termasuk: 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) Selain itu, paket ini juga berisi org.eclipse.core.runtime agak membingungkan. Paket ini Juga diimpor. Selain itu, kesalahan impor paket mungkin terjadi tergantung pada versinya.
Kode berikut ini merupakan hasil pembuatan Tableview yang dikutip dari “Eclipse Getting Started to Mastery”
+ memperluas salinan biasa tampilan sumber ke clipboardprint?
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;
kelas publik TableViewer1 {
public static void main(String[] args) {
TableViewer1().open();
}
kekosongan publik terbuka() {
tampilan tampilan akhir = tampilan baru();
cangkang shell terakhir = cangkang baru();
cangkang.setSize(500, 150);
//-------------------------------
shell.setLayout(FillLayout baru());
// Langkah pertama: Buat objek TableViewer. Gaya: MULTI memungkinkan banyak pilihan, H_SCROLL memiliki bilah gulir horizontal, V_SCROLL memiliki bilah gulir vertikal, BORDER memiliki batas, dan FULL_SELECTION memilih seluruh baris.
TableViewer tv = TableViewer baru(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Langkah 2: Atur metode tata letak melalui objek Tabel yang terdapat dalam tabel
Tabel tabel = tv.getTable();
table.setHeaderVisible(true); // Menampilkan header tabel
table.setLinesVisible(true); // Menampilkan baris tabel
TableLayout layout = new TableLayout(); // Tata letak yang didedikasikan untuk tabel
tabel.setLayout(tata letak);
// Langkah 3: Buat kolom tabel menggunakan kelas TableColumn
layout.addColumnData(new ColumnWeightData(13));//ID lebar kolom 13 piksel
new TableColumn(tabel, SWT.NONE).setText("Nomor ID");
layout.addColumnData(ColumWeightData baru(40));
new TableColumn(tabel, SWT.NONE).setText("Nama");
layout.addColumnData(ColumnWeightData baru(20));
new TableColumn(tabel, SWT.NONE).setText("Jenis Kelamin");
layout.addColumnData(ColumnWeightData baru(20));
new TableColumn(tabel, SWT.NONE).setText("Umur");
layout.addColumnData(ColumWeightData baru(60));
new TableColumn(tabel, SWT.NONE).setText("Rekam waktu pembuatan");
// Langkah 4: Siapkan penampung bagian dalam dan penanda
tv.setContentProvider(TableViewerContentProvider());
tv.setLabelProvider(TableViewerLabelProvider());
// Langkah 5: Gunakan metode setInput dari TableViewer untuk memasukkan data ke dalam tabel
Data objek = PeopleFactory.getPeoples();
tv.setInput(data);
//-------------------------------
shell.open();
while (!shell.isDisposition()) {
jika (!display.readAndDispatch())
tampilan.tidur();
}
tampilan.buang();
}
}
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;
kelas publik TableViewer1 {
public static void main(String[] args) {
TableViewer1().open();
}
kekosongan publik terbuka() {
tampilan tampilan akhir = tampilan baru();
cangkang shell terakhir = cangkang baru();
cangkang.setSize(500, 150);
//-------------------------------
shell.setLayout(FillLayout baru());
// Langkah pertama: Buat objek TableViewer. Gaya: MULTI memungkinkan banyak pilihan, H_SCROLL memiliki bilah gulir horizontal, V_SCROLL memiliki bilah gulir vertikal, BORDER memiliki batas, dan FULL_SELECTION memilih seluruh baris.
TableViewer tv = TableViewer baru(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Langkah 2: Atur metode tata letak melalui objek Tabel yang terdapat dalam tabel
Tabel tabel = tv.getTable();
table.setHeaderVisible(true); // Menampilkan header tabel
table.setLinesVisible(true); // Menampilkan baris tabel
TableLayout layout = new TableLayout(); // Tata letak yang didedikasikan untuk tabel
tabel.setLayout(tata letak);
// Langkah 3: Buat kolom tabel menggunakan kelas TableColumn
layout.addColumnData(new ColumnWeightData(13));//ID lebar kolom 13 piksel
new TableColumn(tabel, SWT.NONE).setText("Nomor ID");
layout.addColumnData(ColumWeightData baru(40));
new TableColumn(tabel, SWT.NONE).setText("Nama");
layout.addColumnData(ColumnWeightData baru(20));
new TableColumn(tabel, SWT.NONE).setText("Jenis Kelamin");
layout.addColumnData(ColumnWeightData baru(20));
new TableColumn(tabel, SWT.NONE).setText("Umur");
layout.addColumnData(ColumWeightData baru(60));
new TableColumn(tabel, SWT.NONE).setText("Rekam waktu pembuatan");
// Langkah 4: Siapkan penampung bagian dalam dan penanda
tv.setContentProvider(TableViewerContentProvider());
tv.setLabelProvider(TableViewerLabelProvider());
// Langkah 5: Gunakan metode setInput dari TableViewer untuk memasukkan data ke dalam tabel
Data objek = PeopleFactory.getPeoples();
tv.setInput(data);
//-------------------------------
shell.open();
while (!shell.isDisposition()) {
jika (!display.readAndDispatch())
tampilan.tidur();
}
tampilan.buang();
}
}
Berikut ini adalah dua kelas yang disediakan. Jika kode kedua kelas ini kecil dan layanannya satu tabel, maka dapat ditulis sebagai kelas internal:
lihat salinan biasa ke cetak papan klip?
impor java.util.List;
import org.Eclipse.jface.viewers.IStructuredContentProvider;
import org.Eclipse.jface.viewers.Viewer;
//Wadah bagian dalam. Kelas ini memfilter dan mengubah data yang dimasukkan ke dalam formulir.
//Kelas ini memiliki tiga metode untuk mengimplementasikan antarmuka, di antaranya getElements adalah metode utama, dua metode lainnya jarang digunakan, implementasi kosong saja sudah cukup
kelas publik TableViewerContentProvider mengimplementasikan IStructuredContentProvider {
// Filter dan ubah input kumpulan data ke tabel.
// Semua kumpulan data masukan harus diubah menjadi array. Setiap elemen array adalah objek entitas, yang merupakan catatan dalam tabel.
Objek publik[] getElements(Elemen objek) {
//Elemen parameter adalah input objek melalui setInput(Input objek). Dalam contoh ini, input ke setInput adalah kumpulan Daftar.
if (elemen instanceof List)//Tambahkan penilaian tipe Daftar
return ((Daftar) elemen).toArray(); // Ubah kumpulan data Daftar menjadi array
kalau tidak
return new Object[0]; //Jika ini bukan tipe Daftar, kembalikan array kosong
}
// Metode ini dipicu ketika objek TableViewer ditutup
public void buang() {
}
// Metode ini terpicu ketika TableViewer memanggil setInput() lagi
public void inputChanged(Penampil v, Objek Input lama, Objek Input baru) {
}
}
impor java.util.List;
import org.Eclipse.jface.viewers.IStructuredContentProvider;
import org.Eclipse.jface.viewers.Viewer;
//Wadah bagian dalam. Kelas ini memfilter dan mengubah data yang dimasukkan ke dalam formulir.
//Kelas ini memiliki tiga metode untuk mengimplementasikan antarmuka, di antaranya getElements adalah metode utama, dua metode lainnya jarang digunakan, implementasi kosong saja sudah cukup
kelas publik TableViewerContentProvider mengimplementasikan IStructuredContentProvider {
// Filter dan ubah input kumpulan data ke tabel.
// Semua kumpulan data masukan harus diubah menjadi array. Setiap elemen array adalah objek entitas, yang merupakan catatan dalam tabel.
Objek publik[] getElements(Elemen objek) {
//Elemen parameter adalah input objek melalui setInput(Input objek). Dalam contoh ini, input ke setInput adalah kumpulan Daftar.
if (elemen instanceof List)//Tambahkan penilaian tipe Daftar
return ((Daftar) elemen).toArray(); // Ubah kumpulan data Daftar menjadi array
kalau tidak
return new Object[0]; //Jika ini bukan tipe Daftar, kembalikan array kosong
}
// Metode ini dipicu ketika objek TableViewer ditutup
public void buang() {
}
// Metode ini terpicu ketika TableViewer memanggil setInput() lagi
public void inputChanged(Penampil v, Objek Input lama, Objek Input baru) {
}
}
lihat salinan biasa ke cetak papan klip?
import org.Eclipse.jface.viewers.ILabelProviderListener;
import org.Eclipse.jface.viewers.ITableLabelProvider;
import org.Eclipse.swt.graphics.Image;
//Pemberi tag. Jika wadah bagian dalam memproses masukan kumpulan data ke dalam formulir,
//Kemudian pemberi tag memproses dan mentransformasikan objek entitas tunggal dalam kumpulan data, dan pemberi tag menentukan kolom tabel mana yang menampilkan bidang dalam objek entitas.
kelas publik TableViewerLabelProvider mengimplementasikan ITableLabelProvider {
//Membuat beberapa gambar
Gambar pribadi[] gambar = Gambar baru[] {
Gambar baru(null, "ikon/refresh.gif"),
Gambar baru(null, "ikon/bintang.jpg"),
Gambar baru(null, "icons/moon.jpg") });
// Metode ini menentukan teks apa yang ditampilkan di setiap kolom tabel untuk catatan data.
//Parameter elemen adalah objek kelas entitas. col adalah nomor kolom dari kolom yang sedang disetel, 0 adalah kolom pertama.
public String getColumnText(Elemen objek, int kolom) {
PeopleEntity o = elemen (PeopleEntity); // ketik konversi
if (col == 0)//Data apa yang harus ditampilkan di kolom pertama?
kembali o.getId().toString();
jika (kolom == 1)
kembali o.getName();
jika (kolom == 2)
kembali o.isSex() ? "Pria" : "Wanita";
jika (kolom == 3)
return String.valueOf(o.getAge()); // Ubah tipe int menjadi tipe String
jika (kolom == 4)
kembali o.getCreateDate().toString();
return null; // Metode dapat mengembalikan nilai null
}
// Metode getColumnText digunakan untuk menampilkan teks, dan metode ini digunakan untuk menampilkan gambar.
Gambar publik getColumnImage(Elemen objek, int kolom) {
PeopleEntity o = elemen (PeopleEntity);
// Biarkan saja rekaman "Chen Gang" menampilkan gambar
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//Gambar yang akan ditampilkan pada kolom pertama
mengembalikan gambar[0];
if (col == 2)//Menampilkan ikon berbeda berdasarkan gender
kembali o.isSex() ? gambar[1] : gambar[2];
}
return null; // Metode dapat mengembalikan nilai null
}
public void buang() {
// Jangan lupakan prinsip komponen SWT: buat sendiri dan rilis sendiri
untuk (Gambar gambar : gambar) {
gambar.buang();
}
}
//-------------Metode berikut jarang digunakan, jadi jangan khawatir tentang hal itu untuk saat ini dan biarkan diterapkan dalam keadaan kosong------------- ----
public boolean isLabelProperty(Elemen objek, properti String) {
kembali salah;
}
public void addListener(pendengar ILabelProviderListener) {
}
public void deleteListener(pendengar ILabelProviderListener) {
}
}
import org.Eclipse.jface.viewers.ILabelProviderListener;
import org.Eclipse.jface.viewers.ITableLabelProvider;
import org.Eclipse.swt.graphics.Image;
//Pemberi tag. Jika wadah bagian dalam memproses masukan kumpulan data ke dalam formulir,
//Kemudian pemberi tag memproses dan mentransformasikan objek entitas tunggal dalam kumpulan data, dan pemberi tag menentukan kolom tabel mana yang menampilkan bidang dalam objek entitas.
kelas publik TableViewerLabelProvider mengimplementasikan ITableLabelProvider {
//Membuat beberapa gambar
Gambar pribadi[] gambar = Gambar baru[] {
Gambar baru(null, "icons/refresh.gif"),
Gambar baru(null, "ikon/bintang.jpg"),
Gambar baru(null, "icons/moon.jpg") };
// Metode ini menentukan teks apa yang ditampilkan di setiap kolom tabel untuk catatan data.
//Parameter elemen adalah objek kelas entitas. col adalah nomor kolom dari kolom yang sedang disetel, 0 adalah kolom pertama.
public String getColumnText(Elemen objek, int kolom) {
PeopleEntity o = elemen (PeopleEntity); // ketik konversi
if (col == 0)//Data apa yang harus ditampilkan pada kolom pertama?
kembali o.getId().toString();
jika (kolom == 1)
kembali o.getName();
jika (kolom == 2)
kembali o.isSex() ? "Pria" : "Wanita";
jika (kolom == 3)
return String.valueOf(o.getAge()); // Ubah tipe int menjadi tipe String
jika (kolom == 4)
kembali o.getCreateDate().toString();
return null; // Metode dapat mengembalikan nilai null
}
// Metode getColumnText digunakan untuk menampilkan teks, dan metode ini digunakan untuk menampilkan gambar.
Gambar publik getColumnImage(Elemen objek, int kolom) {
PeopleEntity o = elemen (PeopleEntity);
// Biarkan saja rekaman "Chen Gang" menampilkan gambar
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//Gambar yang akan ditampilkan pada kolom pertama
mengembalikan gambar[0];
if (col == 2)//Menampilkan ikon berbeda berdasarkan gender
kembali o.isSex() ? gambar[1] : gambar[2];
}
return null; // Metode dapat mengembalikan nilai null
}
public void buang() {
// Jangan lupakan prinsip komponen SWT: buat sendiri dan rilis sendiri
untuk (Gambar gambar : gambar) {
gambar.buang();
}
}
//-------------Metode berikut jarang digunakan, jadi jangan khawatir tentang hal itu untuk saat ini dan biarkan diterapkan dalam keadaan kosong------------- ----
public boolean isLabelProperty(Elemen objek, properti String) {
kembali salah;
}
public void addListener(pendengar ILabelProviderListener) {
}
public void deleteListener(pendengar ILabelProviderListener) {
}
}
Yang lainnya adalah kelas entitas. Di sini kita cukup menulis sebuah entitas. Data di sini dapat dibaca dari database, tetapi kemudian perhatikan jenis container yang digunakan untuk menyimpan data tersebut.
Dan perhatikan konversi tipe.
lihat salinan biasa ke cetak papan klip?
import java.util.Date;
//Kelas ini berisi lima variabel dengan tipe data berbeda, sesuai dengan lima field dalam tabel database. Variabelnya bertipe privat, artinya hanya bisa
//Diakses oleh kode internal kelas, dunia luar hanya dapat mengaksesnya melalui metode Setter/Geter yang sesuai dari variabel-variabel ini.
kelas publik PeopleEntity {
private Long id; //Kode identifikasi unik, sering kali merupakan kolom ID yang bertambah secara otomatis di database
nama String pribadi; //nama
seks boolean pribadi; //Jenis kelamin laki-laki sejati, perempuan palsu
usia int pribadi; //Umur
private Date createDate; //Tanggal pembuatan rekaman. Jenis tanggal adalah java.util.Date, bukan java.sql.Date
//Kode berikut adalah metode Setter/Geter dari setiap field. Lihat Bagian 3.5.2, metode ini dapat dibuat secara otomatis di Eclipse.
public Long getId() { kembalikan id;}
public void setId(Panjang panjang1) {id = panjang1;}
public String getName() {nama kembalian;}
public void setName(String string) {nama = string;}
boolean publik isSex() { kembalikan seks;}
public void setSex(boolean seks) { this.sex = seks }
public int getAge() {usia kembali;}
public void setAge(int i) {usia = i;}
Tanggal publik getCreateDate() {return createDate;}
public void setCreateDate(Tanggal tanggal) {createDate = tanggal;}
}
import java.util.Date;
//Kelas ini berisi lima variabel dengan tipe data berbeda, sesuai dengan lima bidang dalam tabel database. Variabelnya bertipe privat, artinya hanya bisa
//Diakses oleh kode internal kelas, dunia luar hanya dapat mengaksesnya melalui metode Setter/Geter yang sesuai dari variabel-variabel ini.
kelas publik PeopleEntity {
private Long id; //Kode identifikasi unik, sering kali merupakan kolom ID yang bertambah secara otomatis di database
nama String pribadi; //nama
seks boolean pribadi; //Jenis kelamin laki-laki sejati, perempuan palsu
usia int pribadi; //Usia
private Date createDate; //Tanggal pembuatan rekaman. Jenis tanggal adalah java.util.Date, bukan java.sql.Date
//Kode berikut adalah metode Setter/Geter dari setiap field. Lihat Bagian 3.5.2, metode ini dapat dibuat secara otomatis di Eclipse.
public Long getId() { kembalikan id;}
public void setId(Panjang panjang1) {id = panjang1;}
public String getName() {nama kembalian;}
public void setName(String string) {nama = string;}
boolean publik isSex() { kembalikan seks;}
public void setSex(boolean seks) { this.sex = seks }
public int getAge() {usia kembali;}
public void setAge(int i) {usia = i;}
Tanggal publik getCreateDate() {return createDate;}
public void setCreateDate(Tanggal tanggal) {createDate = tanggal;}
}
Selain itu, ada antarmuka yang dienkapsulasi untuk memperoleh data:
lihat salinan biasa ke cetak papan klip?
impor java.util.ArrayList;
import java.util.Date;
impor java.util.List;
//Buat pabrik untuk objek PeopleEntity, buat tiga objek PeopleEntry, dan muat objek tersebut ke dalam koleksi Daftar untuk dikembalikan
kelas publik PeopleFactory {
public static List<PeopleEntity> getPeoples() {//Metode statis pabrik
Daftar<PeopleEntity> daftar = ArrayList baru<PeopleEntity>();
{ // Objek kelas entitas pertama
PeopleEntity o = PeopleEntity baru();
o.setId(new Long(1));//Jenis bidang id didefinisikan sebagai Panjang, sehingga perlu dikonversi
o.setName("Chen Gang");
o.setSex(benar);
o.setUmur(28);
o.setCreateDate(Tanggal baru()); // Tanggal sekarang
daftar.tambahkan(o);
}
{ // Objek kelas entitas kedua
PeopleEntity o = PeopleEntity baru();
o.setId(2L); //Gunakan fungsi tinju otomatis JDK5.0 untuk menyimpan konversi dari objek panjang ke objek Panjang
o.setName("bacaan mingguan");
o.setSex(salah);
o.setUmur(18);
o.setCreateDate(Tanggal baru());
daftar.tambahkan(o);
}
{ // Objek kelas entitas ketiga
PeopleEntity o = PeopleEntity baru();
o.setId(3L);
o.setName("Chen Berubah");
o.setSex(benar);
o.setUmur(27);
o.setCreateDate(Tanggal baru());
daftar.tambahkan(o);
}
daftar pengembalian;
}
}
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/youxigogo/archive/2009/12/30/5105179.aspx
-