问答卡片(Java)

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class QuizCardBulider {
    private JTextArea question;
    private JTextArea answer;
    private ArrayList<Quizcard> cardList;
    private JFrame frame;

    public static void main(String[] args) {
        QuizCardBulider gui = new QuizCardBulider();
        gui.go();
    }

    public void go(){
        frame = new JFrame("Quiz Card Builder");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel mainPanel = new JPanel();
        Font bigfont = new Font("sanserif",Font.BOLD,24); //设置字体

        question = new JTextArea(6,20);  //6行20字宽
        question.setLineWrap(true);  //启动自动换行
        question.setWrapStyleWord(true);  //当字宽达到上限时自动换行,默认是关闭的(关闭情况下是到字符串结束自动换行)
        question.setFont(bigfont);

        answer = new JTextArea(6,20);
        answer.setLineWrap(true);
        answer.setWrapStyleWord(true);
        answer.setFont(bigfont);

        JScrollPane aScroll = new JScrollPane(answer);
        aScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);  //开启垂直滚动条
        aScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //关闭水平滚动条

        JScrollPane qScroll = new JScrollPane(question);
        qScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); //开启垂直滚动条
        qScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //关闭水平滚动条

        JLabel qlabel = new JLabel("Question:");
        JLabel alabel = new JLabel("Answer:");

        JButton nextButton = new JButton("Next Card");
        nextButton.addActionListener(new NextCardListener());

        cardList = new ArrayList<Quizcard>();  //存储对象的集合

        mainPanel.add(qlabel);
        mainPanel.add(qScroll);
        mainPanel.add(alabel);
        mainPanel.add(aScroll);
        mainPanel.add(nextButton);

        JMenuBar menuBar = new JMenuBar(); //菜单列,用于存储菜单
        JMenu menu = new JMenu("File"); //菜单,存在菜单列中的菜单
        JMenuItem newMenuItem = new JMenuItem("New");   //存放在菜单的项目,完成各种功能(有点想button),清空卡片创建新的卡片
        JMenuItem saveMenuItem = new JMenuItem("Save"); //存放在菜单中的项目,保存卡片
        newMenuItem.addActionListener(new NewMenuItemListener());
        saveMenuItem.addActionListener(new SaveMenuItemListener());
        menuBar.add(menu);
        menu.add(newMenuItem);
        menu.add(saveMenuItem);

        frame.setJMenuBar(menuBar);
        frame.getContentPane().add(BorderLayout.CENTER,mainPanel);
        frame.setSize(500,600);
        frame.setVisible(true);
    }

    public void clearCard(){
        question.setText("");
        question.requestFocus();
        answer.setText("");
        answer.requestFocus();
    }

    class NextCardListener implements  ActionListener{
        public void actionPerformed(ActionEvent event){
            Quizcard card = new Quizcard(question.getText(),answer.getText());
            cardList.add(card);  //将当前内容加入list
            clearCard();
        }
    }

    class SaveMenuItemListener implements  ActionListener{
        public void actionPerformed(ActionEvent event){
            Quizcard card = new Quizcard(question.getText(),answer.getText());
            cardList.add(card);

            JFileChooser fileSave = new JFileChooser();
            fileSave.showSaveDialog(frame);
            saveFile(fileSave.getSelectedFile());
        }
    }

    public void saveFile(File file){
        try{
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));  //缓冲区提高速度

            for(Quizcard temp:cardList){
                writer.write(temp.getQuestion()+"/");    //以此符号分隔后面用split识别
                writer.write(temp.getAnswer()+"\n");    //换行作为readline的识别标志
            }
            writer.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

    class NewMenuItemListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            cardList.clear();
            clearCard();
        }
    }
}

class Quizcard{
    private String question;
    private String answer;

    public Quizcard(String q,String a){
        question = q;
        answer = a;
    }

    public String getQuestion(){
        return question;
    }

    public String getAnswer(){
        return answer;
    }
}
mport java.util.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;

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 reader = new QuizCardPlayer();
        reader.go();
    }

    public void go(){
        frame = new JFrame("Quiz Card Player");
        JPanel mainPanel = new JPanel();
        Font bigFont = new Font("sanserif",Font.BOLD,24); //设置字体

        display = new JTextArea(10,20);   //10行20字宽
        display.setFont(bigFont);
        display.setLineWrap(true);  //开启自动换行
        display.setEditable(false); //文本不可编辑

        JScrollPane scrollPane = new JScrollPane(display);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); //开启垂直滚动条
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //关闭水平滚动条
        nextButton = new JButton("Show Question");
        mainPanel.add(scrollPane);
        mainPanel.add(nextButton);
        nextButton.addActionListener(new NextCardListener());

        JMenuBar menuBar = new JMenuBar();  //菜单列
        JMenu menu = new JMenu("File");  //菜单
        JMenuItem loadMenuItem = new JMenuItem("Load card set"); //菜单项
        loadMenuItem.addActionListener(new OpenMenuListener());
        menu.add(loadMenuItem);
        menuBar.add(menu);
        frame.getContentPane().add(BorderLayout.CENTER,mainPanel);
        frame.setJMenuBar(menuBar);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(640,500);
        frame.setVisible(true);
    } //关闭go

    public class NextCardListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            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); //禁止操作nextbutton
                }
            }
        }
    }//关闭内部类

    public void showNextcard(){
        currentCard = cardList.get(currentCardIndex);   //因为ArrayList已标记为Quizcard类所以不用强制转换
        currentCardIndex++;
        display.setText(currentCard.getQuestion());
        nextButton.setText("Show answer");
        isShowAnswer = true;
    }//关闭方法

    public void makeCard(String lineToParse){
        String[] result = lineToParse.split("/"); //以此来作为分隔形成不同的字符串组

        Quizcard card = new Quizcard(result[0],result[1]);
        cardList.add(card);
        System.out.println("make a card");
    }//关闭方法

    public class OpenMenuListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            JFileChooser fileopen = new JFileChooser();
            fileopen.showOpenDialog(frame);
            loadFile(fileopen.getSelectedFile());
        }
    }//关闭方法

    public 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 ex){
            ex.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值