Sou novato na programação e gostaria de ajuda de vocês. Estou “desenvolvendo” um exemplo de um livro usado para explicar a serialização de objetos onde tenho um programa de flashCards que tem três classes: QuizCard, QuizCardBuilder e QuizCardPlayer.
QuizCard é uma classe auxiliar às outras. QuizCardBuilder é uma classe de construção dos flashCards e que os salva em um arquivo para que QuizCardPlayer os selecione e use.
Eis os Códigos :
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class QuizCardPlayer {
private JTextArea display;
private JTextArea answer;
private ArrayList<QuizCard> cardList;
private QuizCard currentCard;
private int currentCardIndex;
private JFrame frame;
private JButton nextButton;
private boolean isShowAnswer;
public static void main(String[] args){
QuizCardPlayer player = new QuizCardPlayer();
player.go();
}
public void go(){
frame = new JFrame("QuizCard Player");
JPanel mainPanel = new JPanel();
Font bigFont = new Font("sanserif", Font.BOLD, 24);
display = new JTextArea();
display.setFont(bigFont);
display.setLineWrap(true);
display.setEditable(false);
JScrollPane qScroller = new JScrollPane(display);
qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
nextButton = new JButton("Show question");
nextButton.addActionListener(new NextCardListener());
mainPanel.add(qScroller);
mainPanel.add(nextButton);
mainPanel.setLayout( new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("file");
JMenuItem loadMenuItem = new JMenuItem("load card set");
loadMenuItem.addActionListener(new OpenMenuListener());
menuBar.add(fileMenu);
fileMenu.add(loadMenuItem);
frame.setJMenuBar(menuBar);
frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
frame.setVisible(true);
frame.setSize(640, 500);
}
public class NextCardListener implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
if(isShowAnswer){
display.setText(currentCard.getAnswer());
nextButton.setText("Next Card");
isShowAnswer = false;
} else {
if(currentCardIndex < cardList.size()){
showNextCard();
} else {
display.setText("That was last card!");
nextButton.setEnabled(false);
}
}
}
}
public class OpenMenuListener implements ActionListener{
public void actionPerformed(ActionEvent arg0){
JFileChooser fileOpen = new JFileChooser();
fileOpen.showOpenDialog(frame);
loadFile(fileOpen.getSelectedFile());
}
}
private void loadFile(File file){
cardList = new ArrayList<QuizCard> ();
try{
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null){
makeCard(line);
}
reader.close();
} catch (Exception e) {
System.out.println("Couldn't read the card file");
e.printStackTrace();
}
showNextCard();
}
private void makeCard(String lineToParse){
String[] result = lineToParse.split("/");
QuizCard card = new QuizCard(result[0], result[1]);
cardList.add(card);
System.out.println("Made a card.");
}
private void showNextCard(){
currentCard = cardList.get(currentCardIndex);
currentCardIndex++;
display.setText(currentCard.getQuestion());
nextButton.setText("Show Answer");
isShowAnswer = true;
}
}
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
public class QuizCardBuilder {
private JTextArea question;
private JTextArea answer;
private ArrayList<QuizCard> cardList;
private JFrame frame;
public static void main(String[] args){
QuizCardBuilder builder = new QuizCardBuilder();
builder.go();
}
public void go(){
frame = new JFrame("QuizCard Buider");
JPanel mainPanel = new JPanel();
Font bigFont = new Font("sanserif", Font.BOLD, 24);
question = new JTextArea(6, 20);
question.setLineWrap(true);
question.setWrapStyleWord(true);
question.setFont(bigFont);
JScrollPane qScroller = new JScrollPane(question);
qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
answer = new JTextArea(6, 20);
answer.setLineWrap(true);
answer.setWrapStyleWord(true);
answer.setFont(bigFont);
JScrollPane aScroller = new JScrollPane(answer);
aScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
aScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JButton nextButton = new JButton("Next Card");
cardList = new ArrayList<QuizCard>();
JLabel qLabel = new JLabel("Question:");
JLabel aLabel = new JLabel("Answer:");
mainPanel = new JPanel();
mainPanel.add(qLabel);
mainPanel.add(qScroller);
mainPanel.add(aLabel);
mainPanel.add(aScroller);
mainPanel.add(nextButton);
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
nextButton.addActionListener(new NextCardListener());
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem newMenuItem = new JMenuItem("New");
JMenuItem saveMenuItem = new JMenuItem("Save");
newMenuItem.addActionListener(new NewMenuListener());
saveMenuItem.addActionListener(new SaveMenuListener());
fileMenu.add(newMenuItem);
fileMenu.add(saveMenuItem);
menuBar.add(fileMenu);
frame.setJMenuBar(menuBar);
frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
frame.setVisible(true);
frame.setSize(500,600);
}
public class NextCardListener implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
QuizCard card = new QuizCard(question.getText(), answer.getText());
cardList.add(card);
clearCard();
}
}
public class SaveMenuListener implements ActionListener{
public void actionPerformed(ActionEvent ev) {
QuizCard card = new QuizCard(question.getText(), answer.getText());
cardList.add(card);
JFileChooser fileSave = new JFileChooser();
fileSave.showSaveDialog(frame);
saveFile(fileSave.getSelectedFile());
}
}
public class NewMenuListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
cardList.clear();
clearCard();
}
}
private void clearCard(){
question.setText("");
answer.setText("");
question.requestFocus();
}
private void saveFile(File file){
try{
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
for(QuizCard card : cardList){
writer.write(card.getQuestion() + "/");
writer.write(card.getAnswer() + "\n");
}
writer.close();
} catch (Exception e){
System.out.println("Couldn't write the cardList out");
e.printStackTrace();
}
}
}
public class QuizCard {
private String question;
private String answer;
public QuizCard(String q, String a){
}
public void setQuestion(String q){
question = q;
}
public void setAnswer(String a){
answer = a;
}
public String getQuestion(){
return question;
}
public String getAnswer(){
return answer;
}
}
O problema reside na desserialização, onde não consigo vizualizar os flashCards salvos e construídos com QuizCardBuilder!
OBS: Esse código está contido em um livro(Use a cabeça Java), então quem já leu ou passou por isso e conseguiu fazer, por favor, me ajude!
Grato.