O projeto basicamente produziu uma versão agora. Embora seja um trabalho marginal, ainda quero resolver as coisas utilizadas. A primeira é o uso do TableView. RWT é um subconjunto do SWT. Portanto, o RWT pode não implementar totalmente todas as interfaces do SWT, nem é tão completo quanto o SWT. A arquitetura dos dois é diferente, refletida na forma de exibição e na interface, mas os controles básicos ainda são os mesmos. Aqui aprendemos primeiro o uso de alguns controles comuns por meio do SWT.
Primeiro, vamos falar sobre os arquivos de biblioteca exigidos pelo SWT. Inclui: 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) Além disso, este pacote também contém org.eclipse.core.runtime. um pouco confuso. Este pacote também importa. Além disso, podem ocorrer erros de importação de pacotes dependendo da versão.
O código a seguir é a criação do Tableview, citado em "Eclipse Getting Started to Mastery"
+ expandir cópia simples do sourceview para impressão da área de transferência?
importar org.eclipse.jface.viewers.ColumnWeightData;
importar org.eclipse.jface.viewers.TableLayout;
importar org.eclipse.jface.viewers.TableViewer;
importar org.eclipse.swt.SWT;
importar org.eclipse.swt.layout.FillLayout;
importar org.eclipse.swt.widgets.Display;
importar org.eclipse.swt.widgets.Shell;
importar org.eclipse.swt.widgets.Table;
importar org.eclipse.swt.widgets.TableColumn;
classe pública TableViewer1 {
public static void main(String[] args) {
novo TableViewer1().open();
}
público vazio aberto() {
display final display = new Display();
shell final shell = new Shell();
shell.setSize(500, 150);
//-------------------------------------------------------
shell.setLayout(novo FillLayout());
// Etapa um: Crie um objeto TableViewer. Estilo: MULTI permite seleções múltiplas, H_SCROLL possui barras de rolagem horizontais, V_SCROLL possui barras de rolagem verticais, BORDER possui bordas e FULL_SELECTION seleciona a linha inteira.
TableViewer tv = novo TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Passo 2: Defina o método de layout através do objeto Table contido na tabela
Tabela tabela = tv.getTable();
table.setHeaderVisible(true); // Exibe o cabeçalho da tabela
table.setLinesVisible(true); //Exibe as linhas da tabela
TableLayout layout = new TableLayout(); // Layout dedicado às tabelas
tabela.setLayout(layout);
// Etapa 3: Criar colunas de tabela usando a classe TableColumn
layout.addColumnData(new ColumnWeightData(13));//ID largura da coluna 13 pixels
new TableColumn(tabela, SWT.NONE).setText("Número de ID");
layout.addColumnData(new ColumnWeightData(40));
new TableColumn(tabela, SWT.NONE).setText("Nome");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(tabela, SWT.NONE).setText("Sexo");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(tabela, SWT.NONE).setText("Idade");
layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("Hora de criação do registro");
// Etapa 4: configurar o contêiner interno e o tagger
tv.setContentProvider(novo TableViewerContentProvider());
tv.setLabelProvider(novo TableViewerLabelProvider());
// Etapa 5: Use o método setInput do TableViewer para inserir dados na tabela
Dados do objeto = PeopleFactory.getPeoples();
tv.setInput(dados);
//-----------------------------------------------------------
shell.open();
enquanto (!shell.isDisposed()) {
se (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
importar org.eclipse.jface.viewers.ColumnWeightData;
importar org.eclipse.jface.viewers.TableLayout;
importar org.eclipse.jface.viewers.TableViewer;
importar org.eclipse.swt.SWT;
importar org.eclipse.swt.layout.FillLayout;
importar org.eclipse.swt.widgets.Display;
importar org.eclipse.swt.widgets.Shell;
importar org.eclipse.swt.widgets.Table;
importar org.eclipse.swt.widgets.TableColumn;
classe pública TableViewer1 {
public static void main(String[] args) {
novo TableViewer1().open();
}
público vazio aberto() {
display final display = new Display();
shell final shell = new Shell();
shell.setSize(500, 150);
//-------------------------------------------------------
shell.setLayout(novo FillLayout());
// Etapa um: Crie um objeto TableViewer. Estilo: MULTI permite seleções múltiplas, H_SCROLL possui barras de rolagem horizontais, V_SCROLL possui barras de rolagem verticais, BORDER possui bordas e FULL_SELECTION seleciona a linha inteira.
TableViewer tv = novo TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// Passo 2: Defina o método de layout através do objeto Table contido na tabela
Tabela tabela = tv.getTable();
table.setHeaderVisible(true); // Exibe o cabeçalho da tabela
table.setLinesVisible(true); //Exibe as linhas da tabela
TableLayout layout = new TableLayout(); // Layout dedicado às tabelas
tabela.setLayout(layout);
// Etapa 3: Criar colunas de tabela usando a classe TableColumn
layout.addColumnData(new ColumnWeightData(13));//ID largura da coluna 13 pixels
new TableColumn(tabela, SWT.NONE).setText("Número de ID");
layout.addColumnData(new ColumnWeightData(40));
new TableColumn(tabela, SWT.NONE).setText("Nome");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(tabela, SWT.NONE).setText("Sexo");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(tabela, SWT.NONE).setText("Idade");
layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("Hora de criação do registro");
// Etapa 4: configurar o contêiner interno e o tagger
tv.setContentProvider(novo TableViewerContentProvider());
tv.setLabelProvider(novo TableViewerLabelProvider());
// Etapa 5: Use o método setInput do TableViewer para inserir dados na tabela
Dados do objeto = PeopleFactory.getPeoples();
tv.setInput(dados);
//-----------------------------------------------------------
shell.open();
enquanto (!shell.isDisposed()) {
se (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
A seguir estão as duas classes fornecidas. Se o código dessas duas classes for pequeno e o serviço for uma tabela, elas podem ser escritas como classes internas:
visualizar cópia simples para impressão da área de transferência?
importar java.util.List;
importar org.eclipse.jface.viewers.IStructuredContentProvider;
importar org.eclipse.jface.viewers.Viewer;
//Contêiner interno. Esta classe filtra e transforma os dados inseridos no formulário.
//Esta classe possui três métodos para implementar a interface, entre os quais getElements é o método principal, os outros dois métodos raramente são usados, apenas uma implementação vazia é suficiente
classe pública TableViewerContentProvider implementa IStructuredContentProvider {
// Filtre e transforme a entrada do conjunto de dados na tabela.
// Todos os conjuntos de dados de entrada devem ser convertidos em arrays. Cada elemento do array é um objeto de entidade, que é um registro na tabela.
objeto público[] getElements(elemento objeto) {
//O elemento do parâmetro é a entrada do objeto por meio de setInput(Object input). Neste exemplo, a entrada para setInput é uma coleção List.
if (element instanceof List) //Adiciona um julgamento do tipo List
return ((List) element).toArray(); // Converte o conjunto de dados List em um array
outro
return new Object[0]; //Se não for do tipo List, retorna um array vazio
}
// Este método é acionado quando o objeto TableViewer é fechado
public void descarte() {
}
// Este método é acionado quando o TableViewer chama setInput() novamente
public void inputChanged(Visualizador v, Object oldInput, Object newInput) {
}
}
importar java.util.List;
importar org.eclipse.jface.viewers.IStructuredContentProvider;
importar org.eclipse.jface.viewers.Viewer;
//Contêiner interno. Esta classe filtra e transforma os dados inseridos no formulário.
//Esta classe possui três métodos para implementar a interface, entre os quais getElements é o método principal, os outros dois métodos raramente são usados, apenas uma implementação vazia é suficiente
classe pública TableViewerContentProvider implementa IStructuredContentProvider {
// Filtre e transforme a entrada do conjunto de dados na tabela.
// Todos os conjuntos de dados de entrada devem ser convertidos em arrays. Cada elemento do array é um objeto de entidade, que é um registro na tabela.
objeto público[] getElements(elemento objeto) {
//O elemento do parâmetro é a entrada do objeto por meio de setInput(Object input). Neste exemplo, a entrada para setInput é uma coleção List.
if (element instanceof List) //Adiciona um julgamento do tipo List
return ((List) element).toArray(); // Converte o conjunto de dados List em um array
outro
return new Object[0]; //Se não for do tipo List, retorna um array vazio
}
// Este método é acionado quando o objeto TableViewer é fechado
public void descarte() {
}
// Este método é acionado quando o TableViewer chama setInput() novamente
public void inputChanged(Visualizador v, Object oldInput, Object newInput) {
}
}
visualizar cópia simples para impressão da área de transferência?
importar org.eclipse.jface.viewers.ILabelProviderListener;
importar org.eclipse.jface.viewers.ITableLabelProvider;
importar org.eclipse.swt.graphics.Image;
//Marcador. Se o contêiner interno processar a entrada do conjunto de dados no formulário,
//Em seguida, o tagger processa e transforma um único objeto de entidade no conjunto de dados, e o tagger determina em qual coluna da tabela os campos no objeto de entidade são exibidos.
classe pública TableViewerLabelProvider implementa ITableLabelProvider {
//Cria várias imagens
imagem privada[] imagens = nova imagem[] {
nova imagem (null, "icons/refresh.gif"),
nova imagem(null, "icons/star.jpg"),
nova imagem(null, "icons/moon.jpg") };
// Este método determina qual texto é exibido em cada coluna da tabela para registros de dados.
//O parâmetro do elemento é um objeto de classe de entidade. col é o número da coluna a ser definida atualmente, 0 é a primeira coluna.
public String getColumnText(Elemento objeto, int col) {
PeopleEntity o = (PeopleEntity) element; // digita conversão;
if (col == 0)//Quais dados devem ser exibidos na primeira coluna?
retornar o.getId().toString();
se (coluna == 1)
return o.getNome();
se (coluna == 2)
return o.isSex() ? "Masculino" : "Feminino";
se (coluna == 3)
return String.valueOf(o.getAge()); // Converte o tipo int em tipo String
se (coluna == 4)
retornar o.getCreateDate().toString();
return null; // O método pode retornar valor nulo
}
// O método getColumnText é usado para exibir texto e este método é usado para exibir imagens.
imagem pública getColumnImage (elemento objeto, int col) {
PeopleEntity o = elemento (PeopleEntity);
// Deixe apenas o registro "Chen Gang" exibir imagens
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//A imagem a ser exibida na primeira coluna
retornar imagens[0];
if (col == 2) //Exibe ícones diferentes com base no gênero
retornar o.isSex() ? imagens[1] : imagens[2];
}
return null; // O método pode retornar valor nulo
}
public void descarte() {
// Não se esqueça do princípio dos componentes SWT: crie você mesmo e libere você mesmo
para (imagem imagem: imagens) {
imagem.dispose();
}
}
//-------------Os métodos a seguir raramente são usados, então não se preocupe com eles por enquanto e deixe-os serem implementados vazios------------- ----
public boolean isLabelProperty (elemento objeto, propriedade String) {
retornar falso;
}
public void addListener (ouvinte ILabelProviderListener) {
}
public void removeListener (ouvinte ILabelProviderListener) {
}
}
importar org.eclipse.jface.viewers.ILabelProviderListener;
importar org.eclipse.jface.viewers.ITableLabelProvider;
importar org.eclipse.swt.graphics.Image;
//Marcador. Se o contêiner interno processar a entrada do conjunto de dados no formulário,
//Em seguida, o tagger processa e transforma um único objeto de entidade no conjunto de dados, e o tagger determina em qual coluna da tabela os campos no objeto de entidade são exibidos.
classe pública TableViewerLabelProvider implementa ITableLabelProvider {
//Cria várias imagens
imagem privada[] imagens = nova imagem[] {
nova imagem(null, "icons/refresh.gif"),
nova imagem(null, "icons/star.jpg"),
nova imagem(null, "icons/moon.jpg") };
// Este método determina qual texto é exibido em cada coluna da tabela para registros de dados.
//O parâmetro do elemento é um objeto de classe de entidade. col é o número da coluna a ser definida atualmente, 0 é a primeira coluna.
public String getColumnText(Elemento objeto, int col) {
PeopleEntity o = (PeopleEntity) element; // digita conversão;
if (col == 0)//Quais dados devem ser exibidos na primeira coluna?
retornar o.getId().toString();
se (coluna == 1)
return o.getNome();
se (coluna == 2)
return o.isSex() ? "Masculino" : "Feminino";
se (coluna == 3)
return String.valueOf(o.getAge()); // Converte o tipo int em tipo String
se (coluna == 4)
retornar o.getCreateDate().toString();
return null; // O método pode retornar valor nulo
}
// O método getColumnText é usado para exibir texto e este método é usado para exibir imagens.
imagem pública getColumnImage (elemento objeto, int col) {
PeopleEntity o = elemento (PeopleEntity);
// Deixe apenas o registro "Chen Gang" exibir imagens
if (o.getName().equals("Chen Gang") || o.getName().equals("Zhou Yue")) {
if (col == 0)//A imagem a ser exibida na primeira coluna
retornar imagens[0];
if (col == 2) //Exibe ícones diferentes com base no gênero
retornar o.isSex() ? imagens[1] : imagens[2];
}
return null; // O método pode retornar valor nulo
}
public void descarte() {
// Não se esqueça do princípio dos componentes SWT: crie você mesmo e libere você mesmo
para (imagem imagem: imagens) {
imagem.dispose();
}
}
//-------------Os métodos a seguir raramente são usados, então não se preocupe com eles por enquanto e deixe-os serem implementados vazios------------- ----
public boolean isLabelProperty (elemento objeto, propriedade String) {
retornar falso;
}
public void addListener (ouvinte ILabelProviderListener) {
}
public void removeListener (ouvinte ILabelProviderListener) {
}
}
A outra é a classe de entidade. Aqui simplesmente escrevemos uma entidade. Os dados aqui podem ser lidos do banco de dados, mas preste atenção ao tipo de contêiner usado para armazenar os dados.
E preste atenção à conversão de tipo.
visualizar cópia simples para impressão da área de transferência?
importar java.util.Date;
//Esta classe contém cinco variáveis de diferentes tipos de dados, correspondendo a cinco campos na tabela do banco de dados. A variável é do tipo private, ou seja, só pode
//Acessados pelo código interno da classe, o mundo externo só pode acessá-los através dos métodos Setter/Geter correspondentes destas variáveis.
classe pública PessoasEntidade {
private Long id; //Código de identificação exclusivo, geralmente uma coluna de ID que aumenta automaticamente no banco de dados
nome da string privada; //nome
sexo booleano privado; //Gênero verdadeiro masculino, falso feminino
idade int privada; //Idade
private Date createDate; //A data de criação do registro. O tipo de data é java.util.Date, não java.sql.Date
//O código a seguir é o método Setter/Geter de cada campo. Consulte a Seção 3.5.2, esses métodos podem ser gerados automaticamente no Eclipse.
public Long getId() { return id;}
public void setId(Long long1) {id = long1;}
public String getName() {nome de retorno;}
public void setNome(String string) {nome = string;}
public boolean isSex() { return sexo;}
public void setSex(sexo booleano) { this.sex = sexo };
public int getAge() {return idade;}
public void setAge(int i) {idade = i;}
data pública getCreateDate() {return createDate;}
public void setCreateDate(Data data) {createDate = data;}
}
importar java.util.Date;
//Esta classe contém cinco variáveis de diferentes tipos de dados, correspondendo a cinco campos na tabela do banco de dados. A variável é do tipo private, ou seja, só pode
//Acessados pelo código interno da classe, o mundo externo só pode acessá-los através dos métodos Setter/Geter correspondentes destas variáveis.
classe pública PessoasEntidade {
private Long id; //Código de identificação exclusivo, geralmente uma coluna de ID que aumenta automaticamente no banco de dados
nome da string privada; //nome
sexo booleano privado; //Gênero verdadeiro masculino, falso feminino
idade int privada; //Idade
private Date createDate; //A data de criação do registro. O tipo de data é java.util.Date, não java.sql.Date
//O código a seguir é o método Setter/Geter de cada campo. Consulte a Seção 3.5.2, esses métodos podem ser gerados automaticamente no Eclipse.
public Long getId() { return id;}
public void setId(Long long1) {id = long1;}
public String getName() {nome de retorno;}
public void setNome(String string) {nome = string;}
public boolean isSex() { return sexo;}
public void setSex(sexo booleano) { this.sex = sexo };
public int getAge() {return idade;}
public void setAge(int i) {idade = i;}
data pública getCreateDate() {return createDate;}
public void setCreateDate(Data data) {createDate = data;}
}
Além disso, existe uma interface encapsulada para obtenção de dados:
visualizar cópia simples para impressão da área de transferência?
importar java.util.ArrayList;
importar java.util.Date;
importar java.util.List;
//Crie uma fábrica para objetos PeopleEntity, crie três objetos PeopleEntry e carregue-os na coleção List para retornar
classe pública PeopleFactory {
public static List<PeopleEntity> getPeoples() { //Método estático de fábrica
List<PessoasEntity> list = new ArrayList<PessoasEntity>();
{ // O primeiro objeto da classe de entidade
PessoasEntidade o = new PessoasEntidade();
o.setId(new Long(1));//O tipo do campo id é definido como Long, portanto precisa ser convertido
o.setName("Gangue Chen");
o.setSex(verdadeiro);
o.setAge(28);
o.setCreateDate(new Date()); //Data atual
lista.add(o);
}
{ // O segundo objeto da classe de entidade
PessoasEntidade o = new PessoasEntidade();
o.setId(2L); //Use a função de boxe automático do JDK5.0 para salvar a conversão do objeto longo para longo.
o.setName("leitura semanal");
o.setSex(falso);
o.setAge(18);
o.setCreateDate(nova Data());
lista.add(o);
}
{ // O terceiro objeto da classe de entidade
PessoasEntidade o = new PessoasEntidade();
o.setId(3L);
o.setName("Chen Changen");
o.setSex(verdadeiro);
o.setAge(27);
o.setCreateDate(nova Data());
lista.add(o);
}
lista de retorno;
}
}
Este artigo vem do blog CSDN. Por favor, indique a fonte ao reimprimir: http://blog.csdn.net/youxigogo/archive/2009/12/30/5105179.aspx.
-