@author Cleiton
*/
public class ConsultarClientes extends DecoratorPanel {
private Image gif = new Image("./imagens/carregando.gif");
private Panel panel = new Panel();
private RecordDef recordDef = new RecordDef(
new FieldDef[]{
new StringFieldDef(“cpf”),
new StringFieldDef(“nome”),});
private ColumnConfig[] columns = new ColumnConfig[]{
new ColumnConfig(“Cpf”, “cpf”, 100, true, null, “cpf”),
new ColumnConfig(“Nome”, “nome”, 300, true)};
private ColumnModel columnModel = new ColumnModel(columns);
private final GridPanel grid = new GridPanel();
private Reader reader = new ArrayReader(recordDef);
private Store store = new Store(reader);
public ConsultarClientes() {
gif.setVisible(false);
panel.setBorder(false);
panel.setPaddings(15);
grid.setColumnModel(columnModel);
grid.setFrame(true);
grid.setStripeRows(true);
grid.setAutoExpandColumn("cpf");
grid.setHeight(350);
grid.setWidth(600);
grid.setTitle("Array Grid");
Toolbar bottomToolbar = new Toolbar();
bottomToolbar.addFill();
bottomToolbar.addElement(gif.getElement());
bottomToolbar.addButton(new ToolbarButton("Listar clientes", new ButtonListenerAdapter() {
@Override
public void onClick(Button button, EventObject e) {
gif.setVisible(true);
listarClientes();
}
}));
grid.setBottomToolbar(bottomToolbar);
RowSelectionModel selectionModel = new RowSelectionModel(true);
selectionModel.addListener(new RowSelectionListener() {
@Override
public boolean doBeforeRowSelect(RowSelectionModel sm, int rowIndex, boolean keepExisting, Record record) {
return true;
}
@Override
public void onRowDeselect(RowSelectionModel sm, int rowIndex, Record record) {}
@Override
public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record) {
String[] fields = record.getFields();
String linha = "";
for (String s : fields) {
linha += record.getAsString(s) + " - \n";
}
Window.alert(linha);
}
@Override
public void onSelectionChange(RowSelectionModel sm) {}
});
grid.setSelectionModel(selectionModel);
panel.add(grid);
Object[][] data = getCompanyData();
MemoryProxy proxy = new MemoryProxy(data);
store.setDataProxy(proxy);
store.load();
grid.setStore(store);
setWidget(panel);
}
private Object[][] getCompanyData() {
return new Object[][]{
new Object[]{“00000000000”, “aaa”},
new Object[]{“11111111111”, “bbb”},
new Object[]{“22222222222”, “ccc”},
new Object[]{“33333333333”, “ddd”},
new Object[]{“44444444444”, “eee”},
new Object[]{“55555555555”, “fff”},
new Object[]{“66666666666”, “ggg”},
new Object[]{“77777777777”, “iii”},
new Object[]{“88888888888”, “hhh”},
new Object[]{“99999999999”, “jjj”},};
}
private void listarClientes() {
AsyncCallback<List> cbClientes = new AsyncCallback<List>() {
@Override
public void onFailure(Throwable caught) {
gif.setVisible(false);
Window.alert(caught.getClass().getName() + " - " + caught.getMessage());
}
@Override
public void onSuccess(List<Clientes> result) {
gif.setVisible(false);
Object[][] data = new Object[result.size()][];
for (int i = 0; i < result.size(); i++) {
Clientes c = result.get(i);
data[i] = new Object[]{c.getCpf(), c.getNome()};
}
MemoryProxy proxy = new MemoryProxy(data);
store.setDataProxy(proxy);
store.load();
grid.reconfigure(store, columnModel);
gif.setVisible(false);
}
};
getService().listarClientes(cbClientes);
}
public static ConsultarClientesServiceAsync getService() {
ConsultarClientesServiceAsync service = (ConsultarClientesServiceAsync) GWT.create(ConsultarClientesService.class);
ServiceDefTarget endpoint = (ServiceDefTarget) service;
String moduleRelativeURL = GWT.getModuleBaseURL() + “consultas/consultarclientesservice”;
endpoint.setServiceEntryPoint(moduleRelativeURL);
return service;
}
}[/code]inicialmente, a grid exibe dados estaticos, mas depois de clicar no botão listar clientes na bottomToolBar, ele busca clientes de uma tabela no banco, e tem o evento onRowSelect que exibe um Window.alert(…), com os dados da linha selecionada. E pra testar, basta na sua classe entrypoint fazer assimpublic void onModuleLoad() {
RootLayoutPanel.get().add(new ConsultarClientes());
}
eu acho q pra quem ja tem uma “noçãozinha” de como funciona a comunicação com banco e do gwt em geral, o código nao esta dificil de entender, mas qq duvida sobre o código tamo ai pra trocar idéias, que aliás eu ja vou fazer uma pergunta pra vcs sobre esse grid ai a respeito de um columnModel de objetos, como é feito em swing…