2012-06-11 43 views
0

我遇到如下情况:带有多个选项卡的GUI。每个选项卡都显示我的主目录中特定目录中的文件内容。其中一些目录存在于GUI创建时,其他目录不存在。在通过FTP选项卡之一中,我得到一些文件并将其添加到主目录。将新文件添加到目录时更新JTabbedPane

注:我使用的是Java 5的

如何让每个标签知道FTP又增加了一个新的文件属于此选项卡的目录?

public class ScannerPanel extends JPanel implements ChangeListener { 

    private void initGUI()  { 
     setPreferredSize(new Dimension(700, 400)); 
     JTabbedPane tabbedPane = new JTabbedPane(); 

     tabbedPane.addTab("FTP", IconLib.ICON_16X16_DATA,new FtpTabPanel (this),"FTP"); 
     tabbedPane.addTab("PCS", IconLib.ICON_16X16_THUM,new PcsTabPanel (this),"PCS"); 
     tabbedPane.addTab("Car", IconLib.ICON_16X16_PAPE,new CarTabPanel (this),"Car"); 
     tabbedPane.addTab("Pic", IconLib.ICON_16X16_RETI,new PicTabPanel (this),"Pic"); 

     tabbedPane.addChangeListener(this); 
     add(tabbedPane); 
    } 

    public void stateChanged(ChangeEvent e) { 
      //detect new file has been added to directory 
      // update the content of tab 
    } 
} 
+0

由于您需要Java 6,因此可能是[WatchService for Java 6]的副本(http://stackoverflow.com/questions/7968488/watchservice-for-java-6)。 – trashgod

回答

4

看看在'Watching a directory'教程里面包含了很多有用的信息,并建议使用WatchService。对于文件系统监视服务,您可以使用FileSystem#newWatchService方法

+0

我坚持使用Java 7中的java.nio.file。它不在Java 6或以上版本中,我使用java 5. – itro

+0

@itro请在您的问题中添加该信息,因为这是对该问题的一个相当重要的限制建议的答案 – Robin

1

你可以试试这个http://jpathwatch.wordpress.com/应该使用Java 5,工作

jpatchwatch是一个Java库,用于监视目录更改。它使用主机平台的本机操作系统功能来实现此目的以避免轮询。

或者你当然可以写你自己的投票:用了Thread.sleep等待,阅读目录,比较以前的列表,结果......但是,这可以让I/O密集型的,如果你的轮询间隔很短。另请参阅:WatchService for Java 6