1.界面+文件输入输出流
package finalExam; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; public class FrameAndFile extends JFrame implements ActionListener{ String default_save_file_name="myTxT.txt"; JTextArea jTextArea;//用户输入框 JButton jButton_read,jButton_save,jButton_clear;//两个Button public FrameAndFile() { //界面设置 setTitle("记事本"); Container container=getContentPane(); container.setLayout(new BorderLayout()); setLocation(200,300); jTextArea=new JTextArea(30,80); jTextArea.setLineWrap(true); //激活自动换行功能 jTextArea.setWrapStyleWord(true);//换行不断字 container.add("North",jTextArea); JPanel jPanel_button_area=new JPanel(new GridLayout(1,3)); jButton_read=new JButton("读取"); jButton_clear=new JButton("清空"); jButton_save=new JButton("保存"); jPanel_button_area.add(jButton_save); jPanel_button_area.add(jButton_clear); jPanel_button_area.add(jButton_read); jButton_clear.addActionListener(this); jButton_read.addActionListener(this); jButton_save.addActionListener(this); container.add("Center",jPanel_button_area); pack(); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] args) { new FrameAndFile(); } @Override public void actionPerformed(ActionEvent e) { switch (e.getActionCommand()) { case "清空": jTextArea.setText(""); break; case "保存": save(); break; case "读取": read(); break; default: break; } } /** * 文件读取 * 使用FileReader+BufferedReader * */ public void read() { FileReader fileReader=null; BufferedReader bufferedReader=null; File file=new File(default_save_file_name); if(file.exists()) { try { fileReader=new FileReader(file); bufferedReader=new BufferedReader(fileReader); String input_str=""; while(bufferedReader.ready()) { input_str=input_str+bufferedReader.readLine(); } jTextArea.setText(input_str); } catch (FileNotFoundException e) { showErrorMessage("出错了:"+e); e.printStackTrace(); } catch (IOException e) { showErrorMessage("出错了:"+e); e.printStackTrace(); }finally { try { bufferedReader.close(); fileReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }else { showErrorMessage("文件不存在!"); } } /** * 文件保存 * 使用FileWriter * */ public void save() { Writer writer=null; File file=new File(default_save_file_name); try { writer=new FileWriter(file,true); String string=jTextArea.getText(); if(string!=null||!string.equals("")){ writer.write(string); writer.flush(); showMessage("保存成功"); }else { showErrorMessage("请输入完整!"); } } catch (IOException e) { showErrorMessage("出错了:"+e); e.printStackTrace(); }finally { try { writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void showMessage(String message) { JOptionPane.showMessageDialog(null, message); } public void showErrorMessage(String message) { JOptionPane.showMessageDialog(null, message, "警告", JOptionPane.WARNING_MESSAGE); } }
2..编写选号程序,在窗体中安排6个标签,每个标签上显示0-9之间的一位数字,每位数字用一个线程控制其变化,单击“停止”按钮则所有标签数字停止变化。(多线程)
package finalExam; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class MultiplyThread extends JFrame{ //自定义一个类,负责封装所有控件的操作 RandomPanelManager randomPanelManager; //主类只负责界面操作 public MultiplyThread() { setTitle("抽号"); Container container=getContentPane(); container.setLayout(new FlowLayout()); setBounds(200,300,300,350); randomPanelManager=new RandomPanelManager(); container.add(randomPanelManager.getCom()); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } //管理类 class RandomPanelManager implements ActionListener{ List<MyLable> lables;//用来存放6个MyLable JPanel jPanel;//封装在一个大的JPanel中 public RandomPanelManager() { lables=new ArrayList<MultiplyThread.MyLable>(); jPanel=new JPanel(new GridLayout(7,1,10,10)); for(int i=0;i<6;i++) { MyLable myLable=new MyLable(); lables.add(myLable); jPanel.add(myLable); } JPanel jPanel_buttonJPanel=new JPanel(new GridLayout(1,2)); JButton jButton_startButton=new JButton("开始"); JButton jButton_endButton=new JButton("停止"); jButton_endButton.addActionListener(this); jButton_startButton.addActionListener(this); jPanel_buttonJPanel.add(jButton_startButton); jPanel_buttonJPanel.add(jButton_endButton); jPanel.add(jPanel_buttonJPanel); } public JPanel getCom() { return jPanel; } @Override public void actionPerformed(ActionEvent e) { switch (e.getActionCommand()) { case "开始": start(); break; case "停止": stop(); break; default: break; } } /** * 开始随机数 * 注意需要先把flag置为true * 再创建Thread并放入运行 * */ public void start() { for (MyLable item:lables) { item.init(); Thread thread=new Thread(item); thread.start(); } } /** * 停止随机数 * 只需要把flag置false即可 * */ public void stop() { for (MyLable item:lables) { item.stop(); } } } //自定义控件,实现Runnable接口 class MyLable extends JPanel implements Runnable{ JLabel jLabel_tag; boolean flag=true; public MyLable() { jLabel_tag=new JLabel("0"); this.setLayout(new FlowLayout()); this.add(jLabel_tag); } public void setText() { jLabel_tag.setText(getRandomNum()+""); } /** * 获取随机数 * 种子为:当前时间 * 范围[0-9] * */ public int getRandomNum(){ Date date=new Date(); Random random=new Random(date.getTime());//随机种子 return random.nextInt(10); } @Override public void run() { while(flag) { setText(); } } public void stop() { flag=false; } /** * 恢复,考虑到重复执行的情况 * */ public void init() { flag=true; } } public static void main(String[] args) { new MultiplyThread(); } }
3.异常处理从键盘输入一个正整数,判断是否为偶数,不是则抛出异常
package finalExam; import java.util.Scanner; import java.util.regex.Pattern; public class MyException extends RuntimeException { private static final long serialVersionUID = 123456789L; public MyException() { super(); // TODO Auto-generated constructor stub } public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); // TODO Auto-generated constructor stub } public MyException(String message, Throwable cause) { super(message, cause); // TODO Auto-generated constructor stub } public MyException(String message) { super(message); // TODO Auto-generated constructor stub } public MyException(Throwable cause) { super(cause); // TODO Auto-generated constructor stub } public static void main(String[] args) { Scanner scanner=null; try { System.out.println("请输入一个整数并继续:"); scanner=new Scanner(System.in); String inputstr=scanner.nextLine(); if(isNumeric(inputstr)) { Integer a=Integer.parseInt(inputstr); if(a<0) { throw new MyException("不是正整数"); } if(a%2!=0) { throw new MyException("不是偶数"); } System.out.println("输入成功!"); }else { throw new MyException("不是整数"); } } catch (Exception e) { e.printStackTrace(); }finally { scanner.close(); } } /** * 通过正则判断字符串是否为整数 * 这个是我考虑的比较多的,可以直接不用判断 * 在主函数中使用Scanner.nextInt * 如果输入不是整数会自动抛出异常 * */ public static boolean isNumeric(String string){ Pattern pattern = Pattern.compile("[0-9]*"); return pattern.matcher(string).matches(); } }
原文地址:https://www.cnblogs.com/robotpaul/p/12104935.html
时间: 2024-11-10 13:34:19