Meu código roda, porém quando clico em “Arquivo” ele dá o seguinte erro:
CONTROLLERCADASTROAUTOR
package sample.control;
import javafx.fxml.FXML;
import javafx.scene.control.DatePicker;
import sample.model.Autor;
import javafx.scene.control.TextField;
import java.time.LocalDate;
public class ControllerJanelaCadastroAutor {
@FXML
private TextField tfAutorNome;
@FXML
private TextField tfAutorCidade;
@FXML
private DatePicker dpAutorData;
public Autor processResult(){
String nome = tfAutorNome.getText();
String cidade = tfAutorCidade.getText();
LocalDate data = dpAutorData.getValue();
Autor a = new Autor(nome,cidade,data);
return a;
}
}
CONTROLLERJANELAPRINCIPAL
package sample.control;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ButtonType;
import javafx.fxml.FXML;
import javafx.scene.control.Dialog;
import javafx.scene.control.ListView;
import javafx.scene.text.Text;
import sample.model.Autor;
import sample.model.ControleColecao;
import java.io.IOException;
import java.util.Optional;
public class ControllerJanelaPrincipal {
@FXML
private ListView<Autor> ltvAutores;
@FXML
private Text txAutorNome;
@FXML
private Text txAutorCidade;
@FXML
private Text txAutorData;
public void initialize(){
atualizaListaAutores();
}
private void atualizaListaAutores(){
ltvAutores.getItems().clear();
for(Autor a:ControleColecao.getInstance().listaAutores()){
ltvAutores.getItems().add(a);
}
}
@FXML
private void mostraDetalhesAutor(){
Autor a = ltvAutores.getSelectionModel().getSelectedItem();
if(a!=null){
txAutorNome.setText(a.getNome());
txAutorData.setText(a.getDataOrigem().toString());
txAutorCidade.setText(a.getCidadeOrigem());
}
}
@FXML
private void cadastraAutor(){
Dialog<ButtonType> dialog = new Dialog<>();
dialog.setTitle("Cadastro de Autor");
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("..view/JanelaCadastroAutor.fxml"));
try{
dialog.getDialogPane().setContent(loader.load());
dialog.getDialogPane().getButtonTypes().add(ButtonType.OK);
dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
Optional<ButtonType> res = dialog.showAndWait();
if(res.isPresent() && res.get() == ButtonType.OK){
ControllerJanelaCadastroAutor controler = loader.getController();
Autor a = controler.processResult();
ControleColecao.getInstance().addAutor(a);
atualizaListaAutores();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
JANELACADASTROAUTOR
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.Text?><content>
<GridPane hgap="10" vgap="10">
<Text text="Nome"
GridPane.columnIndex="0"
GridPane.rowIndex="0"/>
<TextField fx:id="tfAutorNome"
GridPane.columnIndex="1"
GridPane.rowIndex="0"/>
<Text text="Cidade"
GridPane.columnIndex="0"
GridPane.rowIndex="1"/>
<TextField fx:id="tfAutorCidade"
GridPane.columnIndex="1"
GridPane.rowIndex="1"/>
<Text text="Data"
GridPane.columnIndex="0"
GridPane.rowIndex="2"/>
<DatePicker fx:id="dpAutorData"
GridPane.columnIndex="1"
GridPane.rowIndex="2"/>
</GridPane>
</content>
JANELAPRINCIPAL
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.Text?><top>
<MenuBar>
<menus>
<Menu text="Arquivo">
<items>
<MenuItem text="Cadastra Autor"
onAction="#cadastraAutor"/>
<MenuItem text="Sair"/>
</items>
</Menu>
</menus>
</MenuBar>
</top>
<center>
<GridPane>
<HBox GridPane.columnIndex="0"
GridPane.rowIndex="0">
<ListView fx:id="ltvAutores"
onMouseClicked="#mostraDetalhesAutor"/>
<VBox>
<Text fx:id="txAutorNome" text="Nome:"/>
<Text fx:id="txAutorCidade" text="Cidade:"/>
<Text fx:id="txAutorData" text="Data:"/>
</VBox>
</HBox>
</GridPane>
</center>
AUTOR
package sample.model;
import java.io.Serializable;
import java.time.LocalDate;
public class Autor implements Serializable {
private String nome;
private String cidadeOrigem;
private LocalDate dataOrigem;
public Autor(String nome, String cidadeOrigem, LocalDate dataOrigem) {
this.nome = nome;
this.cidadeOrigem = cidadeOrigem;
this.dataOrigem = dataOrigem;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCidadeOrigem() {
return cidadeOrigem;
}
public void setCidadeOrigem(String cidadeOrigem) {
this.cidadeOrigem = cidadeOrigem;
}
public LocalDate getDataOrigem() {
return dataOrigem;
}
public void setDataOrigem(LocalDate dataOrigem) {
this.dataOrigem = dataOrigem;
}
}
CONTROLECOLECAO
package sample.model;
import java.io.*;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class ControleColecao {
private static String ARQ_TXT="colecao.txt";
private static String ARQ_BIN="colecao.bin";
private ArrayList<Autor> listaAutores;
private static ControleColecao instance;
private ControleColecao() {
listaAutores = new ArrayList<>();
}
public static ControleColecao getInstance(){
if(instance == null){
instance = new ControleColecao();
}
return instance;
}
public int addAutor(Autor a){
if(buscaAutor(a.getNome())==null){
listaAutores.add(a);
return 1;
}
return -1;
}
public Autor buscaAutor(String nome){
for(Autor a:listaAutores){
if(a.getNome().equals(nome)){
return a;
}
}
return null;
}
public List<Autor> listaAutores(){
return listaAutores;
}
public void salvaTXT() throws IOException{
File f = new File(ARQ_TXT);
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Autores:"+listaAutores.size()+"\n");
for (Autor a:listaAutores){
bw.write(a.getNome()+";"+a.getCidadeOrigem()+";"+a.getDataOrigem());
bw.write("\n");
}
bw.close();
fw.close();
}
public void leTXT() throws IOException{
listaAutores.clear(); //para garantir que não aja ninguém no arraylist
File f = new File(ARQ_TXT);
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String linha = br.readLine();
int nAutores = Integer.valueOf(linha.split(":")[1]);
while(nAutores>0){
linha=br.readLine();
String[] tokens=linha.split(";");
String nome = tokens[0];
String cidade = tokens[1];
LocalDate origem = LocalDate.parse(tokens[2]);
Autor a = new Autor(nome, cidade, origem);
addAutor(a);
nAutores--;
}
br.close();
fr.close();
}
public void salvaBIN() throws IOException{
File f = new File(ARQ_BIN);
FileOutputStream fo = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fo);
oos.writeObject(listaAutores);
oos.close();
fo.close();
}
public void leBIN() throws IOException{
File f = new File(ARQ_BIN);
FileInputStream fi = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fi);
}
}
MAIN
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import sample.model.ControleColecao;
import java.io.IOException;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("view/JanelaPrincipal.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
@Override
public void init(){
try{
ControleColecao.getInstance().leBIN();
}catch (IOException e){
System.out.println("Arquivo não encontrado!! Primeira execução???");
}
}
@Override
public void stop(){
try{
ControleColecao.getInstance().salvaBIN();
}catch(IOException e){
System.out.println("Problema com amarzenamento!!"+e.getMessage());
}
}
public static void main(String[] args) {
launch(args);
}
}