Читать данный файл в JTable и перезагрузки, если данные файла имеют CH

Мы используем наблюдатель / Наблюдаемые механизма обнаружения, если файл данных были Modifed поскольку в последний раз.

Мы используем те же файлы данных и DataFileTableModel как предыдущие инструкции. Некоторые незначительные изменения, которые необходимы для DataFileTable класс. Этот класс сейчас реализует интерфейс наблюдателя (см. Update () метод, который будет вызываться при наблюдаемом объекте отправить уведомление).


[DataFileTable.java]

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import java.io.*;

import java.util.*;



public class DataFileTable extends JPanel

        implements Observer {

    

    protected JTable table;

    protected DataFileTableModel model;

    

    public DataFileTable(String dataFilePath) {

        DataFileWatchdog  wd;

        Font f;

        

        f = new Font("SanSerif",Font.PLAIN,24);

        setFont(f);

        setLayout(new BorderLayout());

        

        model = new DataFileTableModel(dataFilePath);

        

        table = new JTable();

        table.setModel(model);

        table.createDefaultColumnsFromModel();

        

        JScrollPane scrollpane = new JScrollPane(table);

        add(scrollpane);

        

        // this watchdog (an Observable object)

        //   is monitoring any file change

        wd = new DataFileWatchdog(dataFilePath);

        wd.addObserver(this);

    }

    

    public void update(Observable o, Object arg) {

        // reload data because data file have changed

        model.initVectors();

        table.repaint();

    }

    

    public Dimension getPreferredSize(){

        return new Dimension(400300);

    }

    

    public static void main(String s[]) {

        JFrame frame = new JFrame("Data File Table");

        DataFileTable panel;

        

        panel = new DataFileTable("customers.dat");

        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        frame.setForeground(Color.black);

        frame.setBackground(Color.lightGray);

        frame.getContentPane().add(panel,"Center");

        

        frame.setSize(panel.getPreferredSize());

        frame.setVisible(true);

        frame.addWindowListener(new WindowCloser());

    }

}



class WindowCloser extends WindowAdapter {

    public void windowClosing(WindowEvent e) {

        Window win = e.getWindow();

        win.setVisible(false);

        System.exit(0);

    }

}

DataFileWatchdog, наблюдаемый объект, проста. Мы используем Свинг таймер, чтобы проверить каждую секунду, если заданный файл изменились. Если метка отличается, то последний, то все зарегистрированные наблюдатели уведомляются об этом.


[DataFileWatchdog.java]

import javax.swing.Timer;

import java.awt.event.*;

import java.io.*;

import java.util.*;



public class DataFileWatchdog extends Observable

        implements ActionListener {

    

    Timer t = new Timer(1000,this)// check every second

    long lastModified;

    String file;

    

    DataFileWatchdog(String s) {

        file = s;

        File f = new File(file);

        lastModified = f.lastModified()// original timestamp

        t.start();

    }

    

    public void actionPerformed(ActionEvent e) {

        File f = new File(file);

        long actualLastModified = f.lastModified() ;

        if (lastModified != actualLastModified) {

            // the file have changed

            lastModified = actualLastModified;

            setChanged();

            notifyObservers();

        }

    }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>