卡片-问题和答案
2017-10-23 22:48
176 查看
第一章 问题描述
小时候玩过一种卡片,正面是问题描述,背面是答案,现在我们把这种卡片做出来。
首先,要做出卡片:
创建一个图形界面,里面有两个文本域,一个用来输入问题,一个用来输入答案;
一个按钮,用来输入下一张卡片;
菜单界面,保存和创建新的卡片;
其次,输出卡片:
创建一个图形界面,里面有一个文本域,用来显示问题和答案;
一个按钮,点击后显示问题/答案;
菜单界面,加载卡片;
第二章 基础的卡片类
因为做卡片和显示卡片都要用到String类型的问题和答案,所以先做一个卡片类;
第三章 做卡片
注意1:文件内换行在windows下是/r/n,mac是/n;
或者用自带的换行:
BufferedWriter write1 = new BufferedWriter(new FileWriter(file));
write1.newLine();//根据系统自动匹配换行;
注意2:
fileSave.showSaveDialog(frame);
saveFile(fileSave.getSelectedFile());
因为是保存文件,可能要保存到旧的文件里,或者保存到新的文件里,保存到新文件,保存的文件没有后缀???
半致命缺点:
在文本域输入英文可以,但是输入中文,就没有提示;就是
但是按下空格可以选择中文,求助!!!
这个问题,我用的是百度输入法,没提示;用讯飞,有提示,不知道为啥。
4000
第四章 显示卡片
问题:你输入的时候,不能换行,因为读取的时候是读取一行,问题和答案用 / 分割;如果你输入回车,就会读取异常!
回车是LF;换行是CR|LF
一个也读不出;
只能读2行
完美读入;
小时候玩过一种卡片,正面是问题描述,背面是答案,现在我们把这种卡片做出来。
首先,要做出卡片:
创建一个图形界面,里面有两个文本域,一个用来输入问题,一个用来输入答案;
一个按钮,用来输入下一张卡片;
菜单界面,保存和创建新的卡片;
其次,输出卡片:
创建一个图形界面,里面有一个文本域,用来显示问题和答案;
一个按钮,点击后显示问题/答案;
菜单界面,加载卡片;
第二章 基础的卡片类
因为做卡片和显示卡片都要用到String类型的问题和答案,所以先做一个卡片类;
package card; /* * 卡片数据 * */ public class Card { private String question; private String answer; public Card(String q,String a) { question = q; answer = a; } public String getQuestion() { return question; } public String getAnswer() { return answer; } }
第三章 做卡片
注意1:文件内换行在windows下是/r/n,mac是/n;
或者用自带的换行:
BufferedWriter write1 = new BufferedWriter(new FileWriter(file));
write1.newLine();//根据系统自动匹配换行;
注意2:
fileSave.showSaveDialog(frame);
saveFile(fileSave.getSelectedFile());
因为是保存文件,可能要保存到旧的文件里,或者保存到新的文件里,保存到新文件,保存的文件没有后缀???
半致命缺点:
在文本域输入英文可以,但是输入中文,就没有提示;就是
但是按下空格可以选择中文,求助!!!
这个问题,我用的是百度输入法,没提示;用讯飞,有提示,不知道为啥。
4000
package card; 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.io.IOException; import java.util.ArrayList; import javax.swing.Box; 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; /* * 输入问题和答案,点击next继续输入; * 菜单的save选项会保存问题和答案到txt中 * */ public class CardBuild { private JFrame frame ; private ArrayList<Card> cardList; private JTextArea question; private JTextArea answer; public static void main(String[] args) { CardBuild build = new CardBuild(); build.go(); } //create gui public void go(){ frame = new JFrame("build card"); JPanel panel1 = new JPanel();//creat a 面板 Font bigFont = new Font("楷体", Font.BOLD, 24);//设定字体 question = new JTextArea(6,20);//6行20列,每行20个英文字母 question.setFont(bigFont); //设定textarea换行功能 //设定换行策略;为true,当行的长度大于所分配的宽度时,将自动换行。为 false,始终不换行 question.setLineWrap( true); //为 true,则当行的长度大于所分配的宽度时,将在单词边界(空白)处换行。如果设置为 false,则将在字符边界处换行 question.setWrapStyleWord(true); //设定textarea的滚动条 JScrollPane qScroller = new JScrollPane(question); //只有垂直滚动条 qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //设定答案的文本区域 answer = new JTextArea(6,20); answer.setFont(bigFont); answer.setLineWrap(true); answer.setWrapStyleWord(true); JScrollPane aScroller = new JScrollPane(answer); aScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); aScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //设定小组件 JButton nextButton = new JButton("next card"); nextButton.setFont(bigFont); cardList = new ArrayList<Card>(); JLabel qLabel = new JLabel("question:"); qLabel.setFont(bigFont); JLabel aLabel = new JLabel("answer:"); aLabel.setFont(bigFont); //使用box,垂直排列,按顺序添加 Box box = new Box(BoxLayout.Y_AXIS); box.add(qLabel); //这是添加一个不可见的组件,垂直支柱 box.add(Box.createVerticalStrut(5)); box.add(qScroller); box.add(Box.createVerticalStrut(5)); box.add(aLabel); box.add(Box.createVerticalStrut(5)); box.add(aScroller); box.add(Box.createVerticalStrut(20)); box.add(nextButton); panel1.add(BorderLayout.CENTER, box); nextButton.addActionListener(new nextCardListener());//注册监听 //菜单 JMenuBar menuBuild = new JMenuBar(); JMenu file = new JMenu("File"); JMenuItem newMenu = new JMenuItem("New"); JMenuItem saveMenu = new JMenuItem("Save"); newMenu.addActionListener(new newMenuListener()); saveMenu.addActionListener(new saveMenuListener()); //菜单添加 file.add(newMenu); file.add(saveMenu); menuBuild.add(file); frame.setJMenuBar(menuBuild); frame.getContentPane().add(BorderLayout.CENTER,panel1); //frame.getContentPane().add(panel1); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(300,100,600,600); frame.setVisible(true); } //点击next时会触发,表示user完成输入,并继续下一张卡片 private class nextCardListener implements ActionListener{ //向列表中增加当前卡片并清除文本域 public void actionPerformed(ActionEvent e) { Card card = new Card(question.getText(), answer.getText()); cardList.add(card); clearCard(); } } //点击menu-save会触发,保存到文本中 private class saveMenuListener implements ActionListener{ //生成对话框,输入用户名并保存设置 public void actionPerformed(ActionEvent e) { Card card = new Card(question.getText(), answer.getText()); cardList.add(card); JFileChooser fileSave = new JFileChooser(); //调出存盘对话框(dialog),等待用户决定 fileSave.showSaveDialog(frame); saveFile(fileSave.getSelectedFile()); } } //点击new被触发 private class newMenuListener implements ActionListener{ //打开一组新的卡片,清除卡片列表和文本域 public void actionPerformed(ActionEvent e) { cardList.clear(); clearCard(); } } //清除card private void clearCard() { question.setText(""); answer.setText(""); //把输入焦点放在调用这个方法的控件上 question.requestFocus(); } //将列表保存到txt中 private void saveFile(File file){ try { BufferedWriter write = new BufferedWriter(new FileWriter(file)); for(Card card:cardList){ //一行一张卡片,由/分开问题和答案 write.write(card.getQuestion() + "/"); write.write(card.getAnswer() + "\r\n"); } write.close(); } catch (IOException e) { System.out.println("文件保存失败!"); e.printStackTrace(); } } }
第四章 显示卡片
问题:你输入的时候,不能换行,因为读取的时候是读取一行,问题和答案用 / 分割;如果你输入回车,就会读取异常!
回车是LF;换行是CR|LF
一个也读不出;
只能读2行
完美读入;
package card; import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; 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; /*嗯,创建卡片和运行卡片是两个主程序 * file-load,加载一组卡片数据 * 显示问题,点击show answer 按钮,显示答案 */ public class CardPlay { private JFrame frame; private JButton nextButton; private JTextArea display; private boolean isShowAnswer; private Card currentCard; private int currentCardIndex; private ArrayList<Card> cardList; public static void main(String[] args) { CardPlay play = new CardPlay(); play.go(); //如果cardlist为null,他会报道异常 //System.out.println(play.cardList.size()); } //创建gui public void go(){ frame = new JFrame("play card"); JPanel panel = new JPanel(); Font bigFont = new Font("楷体", Font.BOLD, 24); cardList = new ArrayList<>(); //创建一个显示问题/答案的JTextarea文本域 display = new JTextArea(10,20); display.setFont(bigFont); //自动换行 display.setLineWrap( true); //设置指定的 boolean 变量,以指示此 TextComponent 是否应该为可编辑的 display.setEditable(false); //设定滚动条 JScrollPane qScroller = new JScrollPane(display); //只有垂直滚动条 qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //设定button,添加 nextButton = new JButton("show question"); nextButton.addActionListener(new nextCardListener()); panel.add(qScroller); panel.add(nextButton); //设定菜单 JMenuBar menuBar = new JMenuBar(); JMenu file = new JMenu("File"); //加载卡片 JMenuItem load = new JMenuItem("load card"); load.addActionListener(new loadCardListener()); //添加到frame file.add(load); menuBar.add(file); frame.setJMenuBar(menuBar); frame.getContentPane().add(BorderLayout.CENTER, panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(300,100,600,600); frame.setVisible(true); } //监听next按钮 public class nextCardListener implements ActionListener{ public void actionPerformed(ActionEvent e) { //为true,显示答案;为false,显示问题 if(isShowAnswer){ //显示获取的答案 display.setText(currentCard.getAnswer()); //设定按钮上的文字 nextButton.setText("next card"); isShowAnswer = false; }else { if(currentCardIndex < cardList.size()){ //说明还有卡片 currentCard = cardList.get(currentCardIndex); currentCardIndex++; display.setText(currentCard.getQuestion()); nextButton.setText("show answer"); isShowAnswer = true; }else { display.setText("that is last card!"); isShowAnswer = false; } }//一级else结束 }//方法结束 }//监听button类结束 //监听菜单loadcard的实现 public class loadCardListener implements ActionListener{ public void actionPerformed(ActionEvent e) { JFileChooser file = new JFileChooser( ); //打开一个对话框,选择文件 file.showOpenDialog(frame); //调用方法 loadfile,参数是你在对话框选中的文件 loadFile(file.getSelectedFile()); } } public void loadFile(File file){ //建立缓冲区 try { BufferedReader read = new BufferedReader(new FileReader(file)); //此时,file文件的内容都到了缓存里面 String line; //readLine(),每次从read中读取一行 while((line=read.readLine()) != null){ //这一行数据,问题和答案在一起,分割 makeCard(line); } read.close(); } catch (Exception e) { e.printStackTrace(); } } public void makeCard(String line){ String[] result = line.split("/"); Card card1 = new Card(result[0], result[1]); //cardlist中的每个元素都是文件中的一行!!!!!!!! cardList.add(card1); System.out.println("make a card"); } }
相关文章推荐
- 难倒高手的JVM URLCLASSLOADER类加载异常问题你知道答案吗?
- 应聘Java笔试时可能出现问题及其答案
- 答案_中国象棋将帅问题
- 40个Java集合面试问题和答案
- 知乎对「如何提问题?」的答案总结
- Java笔试时可能出现问题及其答案
- 10个有用的Linux命令面试问题及答案
- 简单的问题,不简单的答案!面试时如何面对HR棘手的提问?
- 最常见的 20 个 jQuery 面试问题及答案
- 最全前端面试问题及答案总结 - trigkit4
- 对于每个复杂的问题都会有一个简单但不准确的答案
- JAVA多线程/并发问题与答案(1)
- C++Primer 第四版 习题9.27的答案问题
- 方法论:带着问题找答案
- 女人最喜欢问题的标准答案【已婚未婚喜爱泡妞打算结婚暂不离婚的都进来培训!】
- 非常牛叉的楼主,自己的问题其实就是答案--用springmvc上传文件时报The current request is not a multipart request异常
- 有感应聘Java笔试时可能出现问题及其答案
- ABAP 面试问题及答案(一)(转)
- 公路修建问题(二分答案+生成树)
- SEO经典面试问题及答案