Ontem assisti ao webcast da Oracle "Enrich your enterprise applications with JavaFX".Confesso que achei bem fraquinha no sentido tecnico, pois foi voltada para simplesmente apresentar a tecnologia para quem nao a conhecia.De importante somente 2 informacoes: - A release GA deve sair em setembro;- Sim. Havera versoes para Mac e para Linux, apesar de uma resposta do FAQ so site dar uma resposta confusa quanto a isto. Para participantes do programa JavaFX Partners (ainda aguardo o retorno de minha inscricao - 2 meses) a possibilidade de disponibilizacao de uma versao beta para Mac.No mais voltamos aos codigos e descobertas da API.Ate mais.Jean Enquanto escrevo minha primeira postagem tecinca, gostaria de partilhar dois link de entusiatas do JavaFX.O primeiro apresenta como desenvolver um Auto-Complete TextBox.O segundo apresenta a diferenca entre Thread, Work, Task e Service na APIi do JavaFX, muito util para uma aplicacao multi-threaded.Espero que estes links seja uteis para voces como foram para mim. Um dos grandes componentes visuais incorporados no JavaFX 2.0 (esteve em preview no 1.3) foi o TableView.Ele oferece um grande suporte na apresentacao de dados em formato de tabela, desde uma apresentacao standard ate uma customizacao total de cada celula.Inicialmente temos que ter em mente que uma tabela e formada de linhas e colunas e que cada interseccao entre elas forma uma celula.Por definicao um TableView do JavaFX tem como fonte de dados para sua formacao um ObservableList de objetos com uma estrutura especifica, que eu chamo de vulgarmente de JavaFxBean. Um JavaFxBean tem uma estrutura proxima aos JavaBeans, porem seus atributos sao descendentes (extensoes) da interface javafx.beans.Property (StringProperty, IntegerProperty, BooleanProperty, ObjectProperty). Segundo a documentacao da API 2.0 ele tem este formato:public class Person {private StringProperty firstName;public void setFirstName(String value) { firstName.set(value); }public String getFirstName() { return firstName.get(); }public StringProperty firstNameProperty() { if (firstName == null) firstName = new StringProperty();return firstName; }private StringProperty lastName;public void setLastName(String value) { lastName.set(value); }public String getLastName() { return lastName.get(); }public StringProperty lastNameProperty() { if (lastName == null) lastName = new StringProperty();return lastName; } }No meu exemplo uso uma classe JPA TbTlmkChamada que e recuperada pela classe TbTlmkChamadaJpaController. Como o JPA so permite a criacao de atributos de tipos especificos (nos quais os descendentes de Property nao se encaixam) criei uma classe (Proxy) TbTlmkChamadaFxBean, a fim de receber os objetos do banco. Esta classe simplesmente possui os mesmos atributos da classe original, mas com tipos descendentes de javafx.beans.Property. Bem ainda nao chegamos ao TableView. A hora e agora.Para uma visualizacao basica, podemos criar um TableView padrao com o seguinte formato:TbTlmkChamadaJpaController control = new TbTlmkChamadaJpaControllerImpl(telemarketingserver.TelemarketingServer.emf); tabela = new TableView();List<TbTlmkChamada> findTbTlmkChamadaEntities = control.findTbTlmkChamadaEntities();List<TbTlmkChamadaFxBean> lista = new ArrayList<TbTlmkChamadaFxBean>();for (int i=0;i < TbTlmkChamadaEntities.size();i++) {lista.add(new TbTlmkChamadaFxBean(findTbTlmkChamadaEntities.get(i)));}ObservableList<TbTlmkChamadaFxBean> chamadas = FXCollections.observableList(lista);tabela.setItems(chamadas);TableColumn<Integer> codigoCol = new TableColumn<Integer>("Codigo");codigoCol.setProperty("codigo");TableColumn<String> dadosCol = new TableColumn<String>("Dados");dadosCol.setProperty("dados");TableColumn<Date> dataCol = new TableColumn<Date>("Data");dataCol.setProperty("proxChamada");final TableColumn<TbTlmkFila> filaCol = new TableColumn<TbTlmkFila>("Fila");filaCol.setProperty("fila");tabela.getColumns().addAll(codigoCol,dadosCol,filaCol,dataCol);tabela.setPrefWidth(800);getChildren().add(tabela);que vai resultar em uma tabela como esta:Como se percebe foram colocados as colunas segundo os atributos da classe TbTlmkChamadaFxBean (usando os seus respectivos metodos toString()).Agora e possivel enriquecer o funcionamento desta tabela. Incialmente a ordenacao das linhas (no exemplo pela coluna Codigo):codigoCol.setComparator(new Comparator() {@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}});Com