O arquivo application.CSS do cap. 6 do livro “Explorando APIs e bibliotecas Java” não está sendo reconhecido pelo aplicativo. Segue abaixo o código do main e do arquivo css:
public class Main extends Application {
@Override
public void start(Stage primaryStage) { //esse é o ponto principal de toda aplicação feita em Java FX. Ele deve ser sobrescrito,
//pois é abstrato da superclasse Application
//Stage é o contêiner principal
Group group = new Group(); //a tela é composta por dois elementos - um label e uma tabela
Scene scene = new Scene(group, 690, 510); //cenário contendo os elementos, a largura e a algura em pixels
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
ObservableList<Produto> produtos = new ProdutoDAO().lista();
TableView<Produto> tableView = new TableView<>(produtos);
TableColumn<Produto,String> nomeColumn = new TableColumn<Produto, String>("Nome");
nomeColumn.setMinWidth(180);
nomeColumn.setCellValueFactory(new PropertyValueFactory<Produto, String>("nome"));
TableColumn<Produto,String> descColumn = new TableColumn<Produto,String>("Descrição");
descColumn.setMinWidth(230);
descColumn.setCellValueFactory(new PropertyValueFactory<Produto,String>("descricao"));
TableColumn<Produto,String> valorColumn = new TableColumn<Produto,String>("Valor");
valorColumn.setMinWidth(60);
valorColumn.setCellValueFactory(new PropertyValueFactory<Produto,String>("valor"));
TableColumn<Produto,String> isbnColumn = new TableColumn<Produto,String>("ISBN");
isbnColumn.setMinWidth(180);
isbnColumn.setCellValueFactory(new PropertyValueFactory<Produto,String>("isbn"));
tableView.getColumns().addAll(nomeColumn, descColumn, valorColumn, isbnColumn);
final VBox vbox = new VBox(tableView);
vbox.setId("vbox"); //identificador para uso do CSS
Label label = new Label("Listagem de Livros");
label.setId("label-listagem"); //identificador único da listagem para uso do CSS
Label progresso = new Label(); //label para o exportador de CSV (mensagens de exportando... e concluído!)
progresso.setId("label-progresso");
progresso.setLayoutX(595);
progresso.setLayoutY(25);
Button button = new Button("Exportar CSV");
button.setLayoutX(585); //a aplicação será direta no application.css
button.setLayoutY(1);
button.setOnAction(event -> {
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
dormePorCincoSegundos();
exportarEmCSV(produtos);
return null;
}
};
task.setOnRunning(e -> progresso.setText("exportando...")); //utilizou o lambda no argumento pq EventHandler é uma interface funcional
task.setOnSucceeded(e -> progresso.setText("concluído!")); //utilizou o lambda no argumento pq EventHandler é uma interface funcional
new Thread(task).start();
});
double valorTotal = produtos.stream() //utilizando Stream
.mapToDouble(Produto::getValor).sum();
Label labelFooter = new Label(String.format("Você tem R$%.2f em estoque, " + "com um total de %d produtos.", valorTotal, produtos.size()));
labelFooter.setLayoutX(1); //a aplicação será direta no application.css
labelFooter.setLayoutY(400);
labelFooter.setId("label-footer");
group.getChildren().addAll(label, vbox, button, progresso, labelFooter);
primaryStage.setTitle("Sistema de livraria com Java FX");
primaryStage.setScene(scene);
primaryStage.show();
}
private void exportarEmCSV(ObservableList<Produto> produtos) {
try {
new Exportador().paraCSV(produtos);
}catch(IOException e) {
System.out.println("Erro ao exportar: " + e);
}
}
private void dormePorCincoSegundos() {
try {
Thread.sleep(5000);
}catch(InterruptedException e) {
System.out.println("Ops, ocorreu um erro: " + e );
}
}
public static void main(String[] args) {
launch(args); //método responsável por iniciar a aplicação
}
}
Agora o arquivo CSS:
#label-listagem{
-fx-font-size: 30px;
-fx-padding: 20 0 10 10;
}
#label-progreso{
-fx-translate-x: 485;
-fx-translate-y: 30;
}
.table-view{
-fx-min-width: 665;
-fx-max-width:
}
.table-column{
-fx-padding: 0 0 0 10;
}
#vbox{
-fx-padding: 70 0 0 10;
}
.button{
-fx-translate-x:595;
-fx-translate-y:25;
-fx-background-color: rgb(31, 149, 206);
-fx-text-fill: white;
}
.button:hover{
-fx-background-color:rgba(31, 149, 206, 0.71);
}
#label-footer{
-fx-font-size: 15px;
-fx-translate-x: 210;
-fx-translate-y: 480;
}