/**
 * @version  2.0
 * @author sharks
*/
/**
 * Instruction
 * this version will use IO
 * apply file to store data
 * it just a table double click table can edit the course
 * */
import java.io.*;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

import java.awt.*;
import java.awt.event.*;

/**
 *Graphic
 *7 JTalbe add to JScrollPane
 *
 * */

/**
 * I should use cardlayout.there are seven days a week
 * and ten classes one day(as Big class is five )
 * so every day should take 5 rows and 3 columns (5,3)
 *
 * */
/**
 * how to generate file
 * first get info from table
 * second when click button get info from table and write to file
 * when opening this software read file from local
 * when renew info must reload file
 * */
class TC extends JFrame implements ActionListener,java.io.Serializable{ //Serializable this interface can write to file

    private JButton[] btn = new JButton[10];

    JScrollPane[] sp = new JScrollPane[7];

    private CardLayout c = new CardLayout();

    private JPanel p = new JPanel(c);

    private JPanel pbottom = new JPanel();

    private JMenuItem[] week = new JMenuItem[7];

    private JMenuBar mb = new JMenuBar();
    private JMenu[] jm = new JMenu[3];

    //evert day has a Table  ,so everyday generate a file ,so just give values
    //seven panel respentsevent days for sunday
    private JTable[] mt = new JTable[7];

    String temp = null ;

    int current = 0;

    JMenuItem ul = null;
    JMenuItem lk = null;

    //table headers
            String headers[] = {"When","Name","Teacher","Class"};
            // table data
            Object[][] cdata = new Object[5][4];

    public void launch(){
        //get previous
        //Bottom Panel

        btn[0] = new JButton("Pervious");
        btn[1] = new JButton("Next");
        btn[0].addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {

                c.previous(p);
                current = current-1;
                if(current<0)current = 6;
                try {
                    setData();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(current);
                        }});

        btn[1].addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {

                c.next(p);
                current ++ ;
                if(current>6)current=0;
                try {
                    setData();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                System.out.println(current);
            }});

        pbottom.add(btn[0]);
        pbottom.add(btn[1]);

        //setMenubar
        jm[0] = new JMenu("Week ");

        week[0] = new JMenuItem("Sun");
        week[1] = new JMenuItem("Mon");
        week[2] = new JMenuItem("Tue");
        week[3] = new JMenuItem("Wed");
        week[4] = new JMenuItem("Thu");
        week[5] = new JMenuItem("Fri");
        week[6] = new JMenuItem("Sat");

        for(int i = 0 ;i<7 ;i++){
            week[i].addActionListener(this);
            jm[0].add(week[i]);
            }
        //lock table
        jm[1] = new JMenu("Edit");
         ul = new JMenuItem("UnLock");
         lk = new JMenuItem("Lock  ");
         ul.addActionListener(this);
         lk.addActionListener(this);
        jm[1].add(ul);
        jm[1].add(lk);
        // load pamel
        jm[2] = new JMenu("Help");
        JMenuItem bl = new JMenuItem("MyBlog");
        bl.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                String command = "explorer.exe http://www.cnblogs.com/oaks";
                try {
                    Runtime.getRuntime().exec(command);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }});
        JMenuItem he = new JMenuItem("Help");
        he.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                /*
                JPanel pp = new JPanel(new GridLayout(6,1,8,8));
                pp.add(new JLabel("1.you can select menubar to loacte week"));
                pp.add(new JLabel("2.double click table to edit this TableCourse"));
                pp.add(new JLabel("3.when you make it up,you must use 'Lock'menuitem to store the data you inputed"));
                pp.add(new JLabel("4.when the table is locked ,you can`t edit it ever until youclick 'UnLoak' menuitem"));
                p.add(pp,"7");
                c.show(p, "7");
                */
                String command = "notepad e:/TC/help.txt";
                try {
                    Runtime.getRuntime().exec(command);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

            }});
        jm[2].add(bl);
        jm[2].add(he);
        //add three menus
        for(int i = 0 ;i<3 ;i++){
        mb.add(jm[i]);
        }

        /**
         * help
         *
         * */

        /**
         * it display by values from object
         * before every displaying read file to give values
         * */

        for(int i = 0 ;i<7;i++){
        mt[i] = new JTable(cdata,headers);
        mt[i].getTableHeader().setPreferredSize(new Dimension(100,40));
        mt[i].setPreferredScrollableViewportSize(new Dimension(this.getWidth(),this.getHeight()));
        mt[i].setRowHeight(50);
        TableColumn column = null;
        int colunms = mt[i].getColumnCount();
        for(int j = 0; j < colunms; j++)
        {
            column = mt[i].getColumnModel().getColumn(j);

            column.setPreferredWidth(150);
        }    

        mt[i].setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        sp[i] = new JScrollPane(mt[i]);
        //sp[i].setSize(500, 500);
        // 0  == sunday
        p.add(sp[i],i+"");

        }

        //set panel content
        /**generate content
         * week panel should have a  common table but different values
         * just in different give table item different values
         * */  

        //add week panel to p[0] panel 1-8
        //panel start with 1 represent Panel1 and 7 represent sunday
        //at last it belongs panel
        //add monday first ,so it display mon day ,the first panel num1 

        setTitle("TC1.6");

        setBounds(400,180,600,386);

        this.setJMenuBar(mb);

        add(p,BorderLayout.CENTER);

        setResizable(false);
        add(pbottom,BorderLayout.SOUTH);
        //this.pack();
        try {
            setData();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        setVisible(true);
        //style on close this frame
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    @Override
    public void actionPerformed(ActionEvent e){
                //set events  for week menu
        for(int i = 0;i<7;i++){
            pbottom.setVisible(true);
            if(e.getSource().equals(week[i]))
                switch(i){
                case 0:

                    current = 0 ;
                    try {
                        setData();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    c.show(p, "0");
                    // 0 == sunday
                    break;
                case 1:
                    current = 1 ;
                    try {
                        setData();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                    c.show(p, "1");
                    break;

                case 2:
                    current = 2;
                    try {
                        setData();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    c.show(p, "2");

                    break;
                case 3:
                    current = 3 ;
                    try {
                        setData();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    c.show(p, "3");

                    break;
                case 4: 

                    current = 4 ;
                    try {
                        setData();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    c.show(p, "4");

                    break;
                case 5:
                    current = 5 ;
                    try {
                        setData();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    c.show(p, "5");

                    break;
                case 6:
                    current = 6 ;
                    try {
                        setData();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    c.show(p, "6");

                    break;

                default:
                    System.out.println("Occur error on switch!");
                }
        }

        //file store &&&&data read
        /**
         * lock means write file reload file and setEditable=No
         * first  I should know which panel is displaying
         * so I should write a method to get Which panel is displaying
         * */

        if(e.getSource().equals(lk)){
            String tmp = null ;

            /*

            for(int i = 0 ;i<5;i++){

                for(int j = 0;j<4;j++){

                    temp = (String)mt[0].getValueAt(i, j);
                    System.out.println(temp);
                    if(temp==null){
                        temp = "n";
                    }
                    try {
                        dos.writeUTF(temp);
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                }
            }
            try {
                dos.flush();
                fos.close();
            dos.close();

            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            */
            String filename = null;
            filename="e:/TC/week"+current+".dat";
            File file = new File(filename);
            FileOutputStream fos = null;
            try {

                    fos = new FileOutputStream(file);
                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            DataOutputStream dos = new DataOutputStream(fos);

            for(int i = 0 ;i<mt[current].getRowCount();i++){

                for(int j = 0;j<mt[current].getColumnCount();j++){
                    temp = (String)mt[current].getValueAt(i, j);

                    if(temp==null){

                        temp = "nl";
                    }
                    try {

                        dos.writeUTF(temp);
                        System.out.println(temp);
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                }

            }

            try {
                    dos.flush();
                    fos.close();
                    dos.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

            try {
                setData();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            mt[current].setEnabled(false);
            this.setTitle("TC1.6---Locked");
        }

        //file read & data store
        if(e.getSource().equals(ul)){
            mt[current].setEnabled(true);
            //System.out.println("this panel false");
            this.setTitle("Week At:"+current+"   TC1.6---UnLocked");
        }

    }
    /**
     * this method help get current panel
     * */
    /*
    public int  getCurrent(){

        if(current>6){
            //max of current is 6,never than 6 so ,never equal 0
            current = 0 ;
        }
        if(current <1 ){
            current  = 6 ;
        }
        return current ;
    }*/

    public void setData() throws IOException{

        String fn = null;
        Object o =new Object();
        fn="e:/TC/week"+current+".dat";
        File ff = new File(fn);
        FileInputStream fis = new FileInputStream(ff);
        DataInputStream dis = new DataInputStream(fis);

        for(int i = 0;i<5;i++){

            for(int j = 0;j<4;j++){

                fn=dis.readUTF();
                if(fn.equals("nl")){

                    fn = "";
                }
            //    System.out.println(fn);
                o = (Object)fn;
                mt[current].setValueAt(o, i, j);

            }
        }
        fis.close();
        dis.close();
        switch(current){
        case 0: this.setTitle("TC1.6 --Sunday");break;
        case 1: this.setTitle("TC1.6 --Monday");break;
        case 2: this.setTitle("TC1.6 --Tuesday");break;
        case 3: this.setTitle("TC1.6 --Wednesay");break;
        case 4: this.setTitle("TC1.6 --Thursday");break;
        case 5: this.setTitle("TC1.6 --Friday");break;
        case 6: this.setTitle("TC1.6 --Saturday");break;
        case 7: this.setTitle("TC1.6 --Help");break;
        default: this.setTitle("TC1.6 --Welcome");break;
        }

    }
    /**
     * copy files in execute package to local disk
     * it needs file object
     * */
    /*public void copyMethod(InputStream cpf,String mf)throws IOException{
        int tp = 0 ;

        BufferedInputStream is = new BufferedInputStream(cpf);

        String extr = "e:/TC/";
        File cpfd =new File(extr+mf);
        System.out.println(extr+mf);
        if(!cpfd.exists()){
            cpfd.createNewFile();
        }
        FileOutputStream os = new FileOutputStream(cpfd);

        while((tp = is.read())!=-1){
            os.write(tp);
        }
        os.flush();
        is.close();
        os.flush();
    }
    */
    public static void main(String[] args){
        String fname = null;
        TC t = new TC();
        File f = new File("e:/TC");
        if(!f.exists()){
        f.mkdir();

        }

        for(int i =0 ;i<7;i++){
            f = new File("e:/TC/week"+i+".dat");
            if(!f.exists()){
                try {
                    f.createNewFile();

                    FileOutputStream foo = null;
                try {
                    foo = new FileOutputStream(f);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                DataOutputStream doo = new DataOutputStream(foo);
                for(int j = 0;j<20;j++){
                    try {
                        doo.writeUTF("nl");
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        }
        f = new File("e:/TC/help.txt");

        if(!f.exists()){
            try {
                f.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            FileWriter foos = null;

            try {
                foos = new FileWriter(f);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        BufferedWriter bos = new BufferedWriter(foos);

        try {
            bos.write("1.you can select menubar to loacte week");
            bos.newLine();
            bos.write("2.double click table to edit this TableCourse");
            bos.newLine();
            bos.write("3.when you make it up,you must use 'Lock'menuitem to store the data you inputed");
            bos.newLine();
            bos.write("4.when the table is locked ,you can`t edit it ever until youclick 'UnLoak' menuitem");
            bos.flush();
            foos.close();
            bos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        }

        t.launch();

    }

}

TC1.6SourceCode java课程表的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. leetcode.图.207课程表-Java

    1. 具体题目 现在你总共有 n 门课需要选,记为 0 到 n-1.在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1].给定 ...

  3. Java实现 LeetCode 630 课程表 III(大小堆)

    630. 课程表 III 这里有 n 门不同的在线课程,他们按从 1 到 n 编号.每一门课程有一定的持续上课时间(课程时间)t 以及关闭时间第 d 天.一门课要持续学习 t 天直到第 d 天时要完成 ...

  4. Java实现 LeetCode 210 课程表 II(二)

    210. 课程表 II 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0, ...

  5. Java实现 LeetCode 207 课程表

    207. 课程表 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] ...

  6. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  7. 从爬取湖北某高校hub教务系统课表浅谈Java信息抓取的实现 —— import java.*;

    原创文章与源码,如果转载请注明来源. 开发环境:Myeclipse,依赖包:apache-httpclient . Jsoup.base64 一.概述 整个系统用Java开发.我们现在要做的是类似于超 ...

  8. Java实验2-数据库编程

    目标:掌握Java数据库编程 内容: 学生选课系统包括如下数据库表 学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Ccredi ...

  9. Java 多线程(1)-Thread和Runnable

    一提到Java多线程,首先想到的是Thread继承和Runnable的接口实现 Thread继承 public class MyThread extends Thread { public void ...

随机推荐

  1. 爬虫之BeautifulSoup类

    安装:pip install BeautifulSoup4 下表列出了主要的解析器,以及它们的优缺点:看个人习惯选取自己喜欢的解析方式 # 获取html代码 import requests r = r ...

  2. Redis06——Redis到底能用在什么地方(上)

    之前我们介绍了一些列关于Redis的数据结构.持久化.过期&淘汰策略.集群化等知识点,感兴趣的小伙伴可以在文章的末尾查看往期内容.今天将为大家带来Redis的应用.由于本篇文章较长,所以将拆分 ...

  3. js 面向对象 打气球小游戏

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Linux安装Elasticsearch7.x

    Elasticsearch下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x8 ...

  5. EPX Studio开发环境介绍

    相信用过Delphi的人,都很清楚FastScript,EPX Studio就是以FastScript为编程基础语言,由于FastScript支持类似于Delphi的Pascal语法,因此EPX St ...

  6. Natas8 Writeup(常见编码、php函数)

    Natas8: 同样给了php源码,审计源码,发现给了一个预设参数encodedSecret,以及一个加密函数encodeSecret, 该函数将secret参数先进行base64编码.然后用strr ...

  7. 2. Plugin execution not covered by lifecycle configuration

    问题: 找到当前项目的工作空间下的.metadata\.plugins\org.eclipse.m2e.core路径, 然后添加lifecycle-mapping-metadata.xml文件,内容如 ...

  8. M-Renamer方法名修改器,iOS项目方法名重构,Objective-C/Swift,代码模型预判,减少误改的机率,替换速度更快,可视化操作,傻瓜式操作,一键操作,引用处自动修改,马甲包的福音

    M-Renamer M-Renamer(Method-Name-Renamer)类方法名修改器,采用链式解析头文件,代码模型预判,减少误改的机率,替换速度更快:可以解析整个项目大多数类的方法,可视化操 ...

  9. [bash]http serevr部署wordpress

    #!/bin/bash # echo "close selinux…" sed -i 's/Enforcing/disabled/' /etc/sysconfig/selinux ...

  10. 【开源】使用Angular9和TypeScript开发RPG游戏(补充了Buffer技能)

    RPG系统构造 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. Github项目源代码地址 RPG系统构造 ver0.02 2020/03/ ...