Java no NotePad com JavaFX e Scene Builder

Pessoal,

tenho duvidas sobre o JavaFx e o Scene Builder. Como estou ainda me desenvolvendo no Java
não estou (ainda) usando IDEs. Estou escrevendo tudo na mão pra consolidar bem os
comandos e conceitos. Vou colocar abaixo as 1as duvidas:

  • Vc usa o JavaFx em um programa normal do Java (trata-se de alguns imports e instanciar as classes do JavaFX)
    ou é, na verdade, um programa novo, escrito e compilado com um novo compilador (não usa o Javac)?

  • O Scene Builder, além de ajudar no design, tb faz o trabalho no FXML pra vc, correto? Se assim for, eu
    não precisarei escrever (codificar) no FXML, pelo menos em um projeto simples, como uma tela que vai
    mostrar o que foi lido em um arq TXT ou em uma Tabela (MySQL)?

  • Baixei o Scene Builder (ultima versão) e “desenhei” uma tela simples e vi que na opção <View/Show Sample>
    eu vejo um código Java criado automaticamente com alguns métodos precedidos por @FXML porém “vazios”.
    É assim que funciona mesmo o Scene Builder? Eu tenho então que pegar ésse código java e codificar o resto?

Grato.

Olá, respondendo as questões:

Vc usa o JavaFx…?
Não entendi muito bem, mas se estiver perguntando se uso javafx em produção, sim, já desenvolvi sistemas profissionalmente com ele e tive ótimos resultados.

Scene Builder
Ajuda e muito, ele gera código FXML, e o esqueleto do controller. É uma ferramenta essencial pra quem desenvolve com Fx, sobre FXML na maioria das vezes você nem vai precisar tocar nela (se estiver usando o SB), mas é sempre bom conhecer suas tags e padrões, veja a Documentação.

Código Gerado pelo SB
O código que ele gera é somente o esqueleto do Controller, que basicamente é uma classe java que irá manipular os eventos e controlar sua tela, ela é uma classe comum que tem como único requisito possuir um método com o nome initialize(), esse método é chamado quando o java termina o carregamento do FXML, a partir daí os componentes anotados com @FXML podem ser manipulados.

Sei que ainda está estudando, mas lhe indico fortemente já ir fazendo com uma IDE, eu uso o NetBeans para o desenvolvimento com Fx. No começo também queria aprender todos os comandos e desenvolver só no bloco de notas e tal (não dá). No mundo real (emprego) você não vai desenvolver assim, sempre vai usar uma ferramenta. Depois que passei a usar uma IDE tive um crescimento muito grande ela não só te ajuda a escrever código como também te faz entender e melhorá-lo. Fica a dica :wink:

Andrauss, obrigado pelas respostas. Tenho mais algumas dúvidas, se vc puder me ajudar:

  • eu vou migrar, em breve, pro NetBeans. Eu só
    estou querendo dar os 1os passos em cada
    ambiente, no caso atual, esse ambiente é o
    JavaFX, da forma mais “manual” possível, pra
    me ajudar a não esquecer dos conceitos. Uma
    dúvida é: pra compilar eu uso o Javac ou tem
    outro compilador. Por enquanto eu quero usar o
    prompt do Windows;

. Eu to querendo criar uma tela simples, pra
começar. Essa tela terá um botão Consulta,
uma área com 2 colunas e várias linhas onde
eu vou colocar os dados q vou ler em uma DB.
A parte de ler o DB, converter (parse) se for o
caso e etc eu não tenho dúvidas. Minha dúvida
está em como “mover” os dados pra essa “area”.
Vi no SB as opçoes TextList (acho q é este o
nome), Grids e etc q parece q vai servir para o q
eu quero, mas olhando o esqueleto gerado pelo
SB eu não vejo as variáveis (as colunas) pra onde
eu devo mover. Usando o TextList como exemplo,
no Code (lado esquerdo) eu só vejo um campo
pra colocar o “id” q é a variável. Não vi como
definir as 2 colunas (2 variáveis na horizontal)
nem as diversas linhas na vertical. Ou,
alternativamente não vi como definir um array,
Por exemplo com 2 dimensões pra isso).

Grato pela ajuda.

Concordo com o “Andrauss”, programar em java no notepad e’ osso.
Eu tambem uso e prefiro o netbeans, nele tem uma opção interessante que te ajuda no arquivo “fxml” gerado pelo scene builder.

Achei as suas questões meio confusas, no começo agente tem mesmo um pouco de dificuldade, inclusive para escrever a duvida.

JavaFX e’ uma biblioteca grafica rica que faz parte do java em si, da mesma forma que o Swing.
E’ 100% puro java e usa o javac pra compilar, pois tudo e’ java.

O FXML e’ a parte do design grafico. A logica da programação voce implementa Initializable entao dentro de seu Controller e nele você tera o acesso ao seu FXML, caso queira atribuir conteudo ou mesmo ler.

go to no minha resposta anterior. Ah go to quanto tempo não te uso.

Então, compilar com javac você até consegue, o problema é seu usuário, ele não vai ter conhecimento suficiente (creio eu) para executar um comando java no cmd para abrir seu programa, nesse caso você teria que gerar um executável .jar, porquê o javac somente compila suas classes (gera bytecode). Use uma ide que ela irá gerar o executável pra você (no netbeans inclusive você pode gerar .exe).

Sobre componentes, use o TableView e adicione as colunas conforme o necessário ele trabalha em conjunto com um ObservableList que é um array de dados basicamente, e você deve dizer para o TableView quais são os dados a exibir com o método setItems. Aqui tem um tutorial bem bacana sobre isso (em pt). Estude coleções List, ArrayList… para depois ir para a API do JavaFX.

Andrauss/J-Menezes, grato pelas respostas. Vi o exemplo q o Andrauss sugeriu. Vou colá-lo abaixo pra facilitar à vcs me ajudarem nas duvidas usando esse modelo como exemplo:

import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;

/**
*

  • @author william
    */
    public class Post13Tabelas extends Application {

    @Override
    public void start(Stage primaryStage) {
    List pessoas = Arrays.asList(
    new Pessoa(“William”, 32, "william@email.com"),
    new Pessoa(“Luana”, 17, "luana@email.com"),
    new Pessoa(“Maria”, 12, "maria@email.com"),
    new Pessoa(“João”, 15, "joao@email.com"),
    new Pessoa(“Antônio”, 28, "antonio@email.com"),
    new Pessoa(“Teles”, 17, "teles@email.com"),
    new Pessoa(“Eduan”, 30, "eduan@email.com"),
    new Pessoa(“Gabu”, 22, "gabu@email.com")
    );

     TableView tabela = new TableView<>();
     TableColumn colunaNome = new TableColumn<>("Nome");
     TableColumn colunaIdade = new TableColumn<>("Idade");
     TableColumn colunaEmail = new TableColumn<>("E-mail");
    
     colunaNome.setCellValueFactory(new PropertyValueFactory<>("nome"));
     colunaIdade.setCellValueFactory(new PropertyValueFactory<>("idade"));
     colunaEmail.setCellValueFactory(new PropertyValueFactory<>("email"));
    
     tabela.setItems(FXCollections.observableArrayList(pessoas));
     tabela.getColumns().addAll(colunaNome, colunaIdade, colunaEmail);
     
     primaryStage.setScene(new Scene(tabela));
     primaryStage.setWidth(250);
     primaryStage.setHeight(300);
     primaryStage.setTitle("Tabelas no JavaFX");
     primaryStage.show();
    

    }

    public static class Pessoa {

     private String nome;
     private int idade;
     private String email;
    
     public Pessoa(String nome, int idade, String email) {
         this.nome = nome;
         this.idade = idade;
         this.email = email;
     }
    
     public String getNome() {
         return nome;
     }
    
     public void setNome(String nome) {
         this.nome = nome;
     }
    
     public int getIdade() {
         return idade;
     }
    
     public void setIdade(int idade) {
         this.idade = idade;
     }
    
     public String getEmail() {
         return email;
     }
    
     public void setEmail(String email) {
         this.email = email;
     }
    

    }
    }

Dúvidas:

  • Sei q o TableView existe no SB. Mas não vi o
    TableColumn. O autor (William) usou o SB ou
    escreveu tudo na mão?

  • o FXML está sendo usado nesse caso? Não
    vi a URL.

  • É possível usar o SB tb pra “desenhar” o
    TableColumn?

Grato.

Aconselho fortemente voce usar um ide tipo netbeans. Assim você vera melhor na pratica como a coisa de fato funciona. Nesse exemplo ele fez na unha, pode parecer estranho mas prefiro assim, mas quem gosta do scene builder e e’ produtivo com ele, legal.

Como eu disse anteriormente tem que “implements Initializable” para programar a logica do negocio. A menos que você queria apenas exibir a tela sem processamento especifico.

Sim e’ possivel

Qual a vantagem de programar no notepad? Dificilmente vc vai precisar disso profissionalmente, caso precise, está fazendo isso errado. Decorar a sintaxe de uma linguagem, é o de menos, a IDE está aí pra isso. Você tem que focar no negócio e não na programação. Linguagem de programação é uma ferramenta pra automatizar alguma coisa, e outra, programando frequentemente em uma IDE, vc irá decorar a sintaxe também.

Opinião minha: não vejo necessidade de aprender a programar num editor de texto, isso só vai te fazer desanimar ou te atrasar pra aprender outras coisas mais necessárias.

Aí alguém te pergunta: Ah e se vc precisar alterar um código que está no servidor algum dia? Resposta: voce irá mesmo alterar um código em produção, direto no servidor? Não devia fazer isso.
Outra pergunta: E se numa entrevista, te pedirem pra programar algo no quadro? A sintaxe da linguagem, vc vai aprender e decorar programando. Um recrutador da Google, por exemplo, não vai ligar que vc não lembra de qual biblioteca é aquela classe, pra colocar o import, nem se quer vai precisar por o import no quadro. Eles querem ver a sua lógica de programação.

Andrauss, grato pela resposta. Vc tem alguma sugestão de onde eu conseguiria ver um exemplo do uso do SB pra “desenhar” a TableColumn? Grato.

Eu acho o SB bem simples e intuitivo, tem diversos tutoriais na net sobre ele veja a Documentação.

De qualquer forma está abaixo como fazer:

Opa! Eu não havia visto o TableColumn no SB. Eu cheguei a ler o Docs na Oracle mas, confesso, achei um pouco complexo para mim. Por exemplo, eu não vi (não consegui ver) exemplos de como linkar as linhas geradas pelo SB (da Class Controller a qual podemos copiar e colar no Notepad) com a Classe com o Método Main q eu terei q criar e nem o link com o FXML q é gerado pelo SB (e q é dificil de ler, pois abrindo o FXML tb com o Notepad fica tudo em uma única linha no arquivo).

Vou explorar o SB agora com a tua dica de onde encontrar o TableColumn.

Vc teria tb um exemplo de um “circuito completo” envolvendo um “desenho” feito no SB onde existam campos (variáveis) q terão que ser trabalhadas no Java, as classes/metodos em Java e o JXML resultante do “desenho” no SB? Isso seria um “norte” para mim.

Grato.

Olá, creio que você está tendo dificuldades por não estar usado IDE. O JavaFX é complexo e tem muitas classes, esqueça bloco de notas. Quando iniciei segui esse tutorial: http://code.makery.ch/library/javafx-8-tutorial/pt/

Boa sorte