赞
踩
该小应用是本人学习Java前期制作的程序,可能还有着一些Bug没有修复,敬请谅解!该应用用到了图形化界面、I/O流本地磁盘读取/写入数据、键盘事件、焦点事件、监听事件等知识。该应用拥有功能:
file菜单项:打开文件、保存文件、另存为文件、写入反馈文件。
edit菜单项:修改数据、检查中文拼写、检查英文拼写、查找单词。
源代码:
package recite; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import javax.swing.filechooser.*; public class Recite { public static void main(String args[]) { new Win(); } } class Win extends JFrame implements ActionListener,FocusListener,KeyListener{ JMenu menu,edit; JMenuItem open,save,save_as,modify,checkCH,checkEN,feedback,find; JMenuBar menuBar; JPanel nPanel,sPanel; JFileChooser fileChooser; Icon leftIcon=new ImageIcon("D:\\Program\\left.png"), rightIcon=new ImageIcon("D:\\Program\\right.png"), greenLight=new ImageIcon("D:\\Program\\d5.png"), blueLight=new ImageIcon("D:\\Program\\d1.png"), orangeLight=new ImageIcon("D:\\Program\\d9.png"), whiteLight=new ImageIcon("D:\\Program\\d2.png"); JButton left,right,greenB,blueB,orangeB; int pageNum=1,pageTotal=100,selectionState,checkCHFlag=0,checkENFlag=1,modifyFlag=0,array1=100,array2=12,saveState=0,modifyed=0; Box baseBox,vBox[]=new Box[array2],hBox[]=new Box[array2]; JTextField mess[]=new JTextField[array2],input[]=new JTextField[array2],answer[]=new JTextField[array2],focusField; JLabel page,status_bar; String data1[][]=new String[array1][array2],data2[][]=new String[array1][array2]; Read autoReadFile=new Read(); File file=new File("D:/Program/Data.txt"); WindowAdapt windowAdapt=new WindowAdapt(); Win(){ init(); setSize(800,800); setLocationRelativeTo(null); setVisible(true); windowAdapt.getFrame(this); addWindowListener(windowAdapt); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); input[0].requestFocus(); } void init() { setTitle("Recite"); fileChooser=new JFileChooser(); FileNameExtensionFilter filter=new FileNameExtensionFilter("Text","txt"); fileChooser.setFileFilter(filter); nPanel=new JPanel(); sPanel=new JPanel(); left=new JButton(); left.setIcon(leftIcon); left.setContentAreaFilled(false); left.setBorderPainted(false); left.setFocusable(false); right=new JButton(); right.setIcon(rightIcon); right.setContentAreaFilled(false); right.setBorderPainted(false); right.setFocusable(false); greenB=new JButton(); greenB.setIcon(whiteLight); greenB.setContentAreaFilled(false); greenB.setBorderPainted(false); greenB.setFocusable(false); blueB=new JButton(); blueB.setIcon(whiteLight); blueB.setContentAreaFilled(false); blueB.setBorderPainted(false); blueB.setFocusable(false); orangeB=new JButton(); orangeB.setIcon(orangeLight); orangeB.setContentAreaFilled(false); orangeB.setBorderPainted(false); orangeB.setFocusable(false); baseBox=Box.createVerticalBox(); for(int i=0;i<array2;i++) { vBox[i]=Box.createVerticalBox(); hBox[i]=Box.createHorizontalBox(); mess[i]=new JTextField(6); mess[i].setEditable(false); mess[i].setFocusable(false); answer[i]=new JTextField(6); answer[i].setEditable(false); answer[i].setFocusable(false); input[i]=new JTextField(6); input[i].addFocusListener(this); mess[i].addKeyListener(this); answer[i].addKeyListener(this); input[i].addKeyListener(this); hBox[i].add(new JLabel(" "+(i+1)+" ")); hBox[i].add(mess[i]); hBox[i].add(answer[i]); hBox[i].add(input[i]); vBox[i].add(hBox[i]); baseBox.add(vBox[i]); baseBox.add(Box.createVerticalStrut(10)); } page=new JLabel(""); status_bar=new JLabel(""); nPanel.add(orangeB); nPanel.add(blueB); nPanel.add(greenB); sPanel.add(left); sPanel.add(page); sPanel.add(right); sPanel.add(status_bar); menuBar=new JMenuBar(); menu=new JMenu("File"); edit=new JMenu("Edit"); open=new JMenuItem("open"); save=new JMenuItem("save"); save_as=new JMenuItem("save as"); modify=new JMenuItem("modify"); checkCH=new JMenuItem("checkCH"); checkEN=new JMenuItem("checkEN"); find=new JMenuItem("find"); feedback=new JMenuItem("feedback"); menu.add(open); menu.add(save); menu.add(save_as); menu.add(feedback); edit.add(modify); edit.add(checkCH); edit.add(checkEN); edit.add(find); menuBar.add(menu); menuBar.add(edit); add(nPanel,BorderLayout.NORTH); add(baseBox,BorderLayout.CENTER); add(sPanel,BorderLayout.SOUTH); open.addActionListener(this); save.addActionListener(this); save_as.addActionListener(this); modify.addActionListener(this); checkCH.addActionListener(this); checkEN.addActionListener(this); find.addActionListener(this); feedback.addActionListener(this); left.addActionListener(this); right.addActionListener(this); orangeB.addActionListener(this); blueB.addActionListener(this); greenB.addActionListener(this); setJMenuBar(menuBar); autoReadFile.readFile(file,data1,data2,mess,array2); pageNum=autoReadFile.pageNum; page.setText(pageNum+"/"+pageTotal); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==open) { int state=fileChooser.showOpenDialog(this); if(state==JFileChooser.APPROVE_OPTION) { file=fileChooser.getSelectedFile(); autoReadFile.readFile(file,data1, data2, mess,array2); pageNum=autoReadFile.pageNum; } status_bar.setText("Open success!"); } else if(e.getSource()==save) { new Save(file,data1,data2,pageNum,array2); status_bar.setText("Save success!"); saveState=1; } else if(e.getSource()==save_as) { if((modifyFlag==1)) { JOptionPane.showMessageDialog(this,"Please off modify","defaults",JOptionPane.WARNING_MESSAGE); return; } int state=fileChooser.showSaveDialog(this); if(state==JFileChooser.APPROVE_OPTION) { file=fileChooser.getSelectedFile(); new Save(file,data1,data2,pageNum,array2); status_bar.setText("Save as success!"); saveState=1; } } else if(e.getSource()==feedback) { Feedback.getInstance(); } else if(e.getSource()==modify||e.getSource()==greenB) { if(checkCHFlag==0||checkENFlag==0) { JOptionPane.showMessageDialog(this, "Please press modify after check on!"); return; } if(!(orangeB.getIcon()==orangeLight)&&(blueB.getIcon()==blueLight)) { JOptionPane.showMessageDialog(this, "Please press modify after check on!"); return ; } if(modifyFlag==0) { for(int i=0;i<array2;i++) { mess[i].setEditable(true); mess[i].setFocusable(true); answer[i].setEditable(true); answer[i].setFocusable(true); } modifyFlag=1; modifyed=1; greenB.setIcon(greenLight); } else if(modifyFlag==1) { for(int i=0;i<array2;i++) { mess[i].setEditable(false); mess[i].setFocusable(false); answer[i].setEditable(false); answer[i].setFocusable(false); data1[pageNum-1][i]=mess[i].getText(); data2[pageNum-1][i]=answer[i].getText(); } modifyFlag=0; greenB.setIcon(whiteLight); } } else if(e.getSource()==checkCH||e.getSource()==blueB) {//check chinese if(checkCHFlag==0) { for(int i=0;i<array2;i++) answer[i].setText(data2[pageNum-1][i]); checkCHFlag=1; blueB.setIcon(blueLight); } else { for(int i=0;i<array2;i++) answer[i].setText(null); checkCHFlag=0; blueB.setIcon(whiteLight); } } else if(e.getSource()==checkEN||e.getSource()==orangeB) {//check english if(checkENFlag==0) { for(int i=0;i<array2;i++) mess[i].setText(data1[pageNum-1][i]); checkENFlag=1; orangeB.setIcon(orangeLight); } else { for(int i=0;i<array2;i++) mess[i].setText(null); checkENFlag=0; orangeB.setIcon(whiteLight); } } else if(e.getSource()==find) { Find find=Find.getInstance(); find.function(data1,array1,data2,array2); } else if(e.getSource()==left) { if(modifyFlag==1) { JOptionPane.showMessageDialog(this, "Please press left after modify off!"); return ; } if(pageNum>1) { page.setText(--pageNum+"/"+pageTotal); for(int i=0;i<array2;i++) { if(checkENFlag==0) mess[i].setText(null); else mess[i].setText(data1[pageNum-1][i]); if(checkCHFlag==0) answer[i].setText(null); else answer[i].setText(data2[pageNum-1][i]); input[i].setText(null); } input[0].requestFocus(); } } else if(e.getSource()==right) { if(modifyFlag==1) { JOptionPane.showMessageDialog(this, "Please press right after modify off!"); return ; } if(pageNum<pageTotal) { page.setText(++pageNum+"/"+pageTotal); for(int i=0;i<array2;i++) { if(checkENFlag==0) mess[i].setText(null); else mess[i].setText(data1[pageNum-1][i]); if(checkCHFlag==0) answer[i].setText(null); else answer[i].setText(data2[pageNum-1][i]); input[i].setText(null); } input[0].requestFocus(); } } } public void run() { String s1=input[selectionState].getText().trim(), s2=data2[pageNum-1][selectionState]; System.out.println("input: "+s1+" answer: "+s2); if(s1.equals(s2)) { System.out.println("Check: correct"); status_bar.setText("Check: correct!"); } else { System.out.println("Check: error"); status_bar.setText("Check: error!"); } } public void focusGained(FocusEvent e) { focusField=(JTextField)e.getSource(); for(int i=0;i<array2;i++) { if(input[i]==focusField) { selectionState=i; System.out.println("now row: "+i); status_bar.setText(null); } } } public void keyReleased(KeyEvent e) {} public void keyPressed(KeyEvent e) { int key=e.getKeyCode(); if(key==KeyEvent.VK_ENTER) { run(); } else if(e.isControlDown()&&key==KeyEvent.VK_S) { new Save(file,data1,data2,pageNum,array2); System.out.println("control+s"); status_bar.setText("(ctrl+s)Save success!"); saveState=1; } else if(e.isShiftDown()&&key==KeyEvent.VK_DELETE) { for(int i=0;i<array2;i++) input[i].setText(null); } else if(e.isControlDown()&&key==KeyEvent.VK_3) { if(checkCHFlag==0||checkENFlag==0) { JOptionPane.showMessageDialog(this, "Please press modify after check on!"); return; } if(!(orangeB.getIcon()==orangeLight)&&(blueB.getIcon()==blueLight)) { JOptionPane.showMessageDialog(this, "Please press modify after check on!"); return ; } if(modifyFlag==0) { for(int i=0;i<array2;i++) { mess[i].setEditable(true); mess[i].setFocusable(true); answer[i].setEditable(true); answer[i].setFocusable(true); } modifyFlag=1; modifyed=1; greenB.setIcon(greenLight); } else if(modifyFlag==1) { for(int i=0;i<array2;i++) { mess[i].setEditable(false); mess[i].setFocusable(false); answer[i].setEditable(false); answer[i].setFocusable(false); data1[pageNum-1][i]=mess[i].getText(); data2[pageNum-1][i]=answer[i].getText(); } modifyFlag=0; greenB.setIcon(whiteLight); } } else if(e.isControlDown()&&key==KeyEvent.VK_2) { if(checkCHFlag==0) { for(int i=0;i<array2;i++) answer[i].setText(data2[pageNum-1][i]); checkCHFlag=1; blueB.setIcon(blueLight); } else { for(int i=0;i<array2;i++) answer[i].setText(null); checkCHFlag=0; blueB.setIcon(whiteLight); } } else if(e.isControlDown()&&key==KeyEvent.VK_1) { if(checkENFlag==0) { for(int i=0;i<array2;i++) mess[i].setText(data1[pageNum-1][i]); checkENFlag=1; orangeB.setIcon(orangeLight); } else { for(int i=0;i<array2;i++) mess[i].setText(null); checkENFlag=0; orangeB.setIcon(whiteLight); } } else if(e.isShiftDown()&&key==KeyEvent.VK_LEFT) { if(modifyFlag==1) { JOptionPane.showMessageDialog(this, "Please press left after modify off!"); return ; } if(pageNum>1) { page.setText(--pageNum+"/"+pageTotal); for(int i=0;i<array2;i++) { if(checkENFlag==0) mess[i].setText(null); else mess[i].setText(data1[pageNum-1][i]); if(checkCHFlag==0) answer[i].setText(null); else answer[i].setText(data2[pageNum-1][i]); input[i].setText(null); } input[0].requestFocus(); } } else if(e.isShiftDown()&&key==KeyEvent.VK_RIGHT) { if(modifyFlag==1) { JOptionPane.showMessageDialog(this, "Please press right after modify off!"); return ; } if(pageNum<pageTotal) { page.setText(++pageNum+"/"+pageTotal); for(int i=0;i<array2;i++) { if(checkENFlag==0) mess[i].setText(null); else mess[i].setText(data1[pageNum-1][i]); if(checkCHFlag==0) answer[i].setText(null); else answer[i].setText(data2[pageNum-1][i]); input[i].setText(null); } input[0].requestFocus(); } } else if(e.isControlDown()&&key==KeyEvent.VK_B) { Feedback.getInstance(); } else if(e.isControlDown()&&key==KeyEvent.VK_F) { Find find=Find.getInstance(); find.function(data1,array1,data2,array2); } } public void keyTyped(KeyEvent e) {} public void focusLost(FocusEvent e) {} class WindowAdapt extends WindowAdapter{ JFrame frame; public void windowClosing(WindowEvent e) { if(saveState==0&&modifyed==1) { int n=JOptionPane.showConfirmDialog(frame, "Save it?","Really",JOptionPane.YES_NO_OPTION); if(n==JOptionPane.YES_OPTION) new Save(file,data1,data2,pageNum,array2); } new Save(file,data1,data2,pageNum,array2); System.exit(0); } public void getFrame(JFrame frame) { this.frame=frame; } } }
package recite; import java.io.*; public class Save { Save(File file,String data1[][],String data2[][],int pageNum,int array2){ try { Writer writer=new FileWriter(file); BufferedWriter bWriter=new BufferedWriter(writer); for(int i=0;i<100;i++) { for(int j=0;j<array2;j++) { if((data1[i][j]!=null)&&(data2[i][j]!=null)) { bWriter.write(data1[i][j]); bWriter.newLine(); bWriter.write("--------------------------------"+data2[i][j]); bWriter.newLine(); } } } File userDataFile=new File(file.getParent(),"userDataFile.txt"); userDataFile.createNewFile(); System.out.println("user_data_file absolutePath:"+userDataFile.getAbsolutePath()); System.out.println("user_data_file absolutePath exists:"+userDataFile.exists()); Writer w=new FileWriter(userDataFile); BufferedWriter bW=new BufferedWriter(w); bW.write(String.valueOf(pageNum)); bW.close(); bWriter.close(); } catch(Exception ex) { System.out.println(ex.toString()); } } }
package recite; import java.io.*; import javax.swing.*; public class Read { int pageNum; void readFile(File file,String data1[][],String data2[][],JTextField mess[],int array2){ try { File userDataFile=new File(file.getParent(),"userDataFile.txt"); System.out.println("user_Data_File.txt exists:"+userDataFile.exists()); Reader reader=new FileReader(file), reader2=new FileReader(userDataFile); BufferedReader bReader=new BufferedReader(reader), bReader2=new BufferedReader(reader2); String s=null; int i=0,j=0,x=0,y=0; while((s=bReader.readLine())!=null) { if(!s.startsWith("-")) { data1[i][j++]=s; if(j>=array2) { i++; j=0; } } else { s=s.replaceAll("-",""); data2[x][y++]=s; if(y>=array2) { x++; y=0; } } } pageNum=Integer.parseInt(bReader2.readLine()); for(int m=0;m<array2;m++) mess[m].setText(data1[pageNum-1][m]); bReader.close(); bReader2.close(); System.out.println("open file!"); } catch(Exception exp) { System.out.println("Can't open file :"); System.out.println(exp.toString()); } } }
package recite; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; public class Find extends JFrame implements KeyListener{ private static Find find=null; WinAdapt winAdapt=new WinAdapt(); JTextField input; JTextArea result; Box one_VBox,base_Box; String data1[][],data2[][]; int array1,array2; private Find() {} public static Find getInstance() { if(find==null) { find=new Find(); find.init(); } else ; return find; } void init() { setTitle("Find"); setSize(500,350); setLocationRelativeTo(null); setVisible(true); addWindowListener(winAdapt); } void function(String data1[][],int array1,String data2[][],int array2) { this.data1=data1; this.data2=data2; this.array1=array1; this.array2=array2; setLayout(new FlowLayout()); input=new JTextField(35); result=new JTextArea(12,6); result.setEditable(false); one_VBox=Box.createVerticalBox(); base_Box=Box.createHorizontalBox(); one_VBox.add(input); one_VBox.add(Box.createVerticalStrut(15)); one_VBox.add(new JScrollPane(result)); base_Box.add(one_VBox); add(base_Box); input.addKeyListener(this); } public void keyTyped(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyPressed(KeyEvent e) { int key=e.getKeyCode(),t=1; if(key==KeyEvent.VK_ENTER) { result.setText(" "); String s=input.getText(); try { for(int i=0;i<array1;i++) { for(int j=0;j<array2;j++) { if(data1[i][j].contains(s)) { result.append((t++)+". Page: "+(i+1)+" row: "+(j+1)+" "+data1[i][j]); result.append("\n"); } if(data2[i][j].contains(s)) { result.append((t++)+". Page: "+(i+1)+" row: "+(j+1)+" "+data2[i][j]); result.append("\n"); } } } t=1; } catch(Exception ex) {} } } class WinAdapt extends WindowAdapter{ public void windowClosing(WindowEvent e) { find=null; } } }
package recite; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class Feedback extends JFrame { JTextArea text; WindowAdap windowAdap=new WindowAdap(); private static Feedback feedback=null; private Feedback(){} public static Feedback getInstance() { if(feedback==null) { feedback=new Feedback(); feedback.init(); } else ; return feedback; } public void init() { this.setLayout(new FlowLayout()); text=new JTextArea(25,42); text.setLineWrap(true); add(new JScrollPane(text)); addWindowListener(windowAdap); try { String s; File file=new File("D:\\Program\\feedback.txt"); Reader reader=new FileReader(file); BufferedReader bReader=new BufferedReader(reader); while((s=bReader.readLine())!=null) text.append(s+"\n"); bReader.close(); } catch(Exception ex) { System.out.println(ex.toString()); } setTitle("feedback"); setSize(500,500); setLocationRelativeTo(null); setVisible(true); } class WindowAdap extends WindowAdapter{ public void windowClosing(WindowEvent e) { try { File file=new File("D:\\Program\\feedback.txt"); Writer writer=new FileWriter(file); BufferedWriter bWriter=new BufferedWriter(writer); bWriter.write(text.getText()); bWriter.close(); } catch(Exception ex) {} feedback=null; } } }
程序界面:
除了源代码,还需要在本地D://Program文件夹中插入如下四张图片或者文件名相同,大小接近的任意六张图片作为按钮
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。