将新文件添加到目录时更新JTabbedPane

时间:2012-06-11 09:12:42

标签: java swing jtabbedpane java-5 changelistener

我的情况如下:带有几个标签的GUI。每个选项卡都显示主目录中特定目录中的文件内容。其中一些目录存在于GUI创建点,而其他目录则不存在。在一个通过FTP的选项卡中,我得到一些文件并将其添加到主目录。

注意:我正在使用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
    }
}

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

你可以试试http://jpathwatch.wordpress.com/这个应该适用于Java 5.

  

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

当然你可以编写自己的轮询:等待Thread.sleep,读取目录,将结果与之前的列表进行比较......但如果你的轮询间隔非常短,这可能会导致I / O密集。另请参阅:WatchService for Java 6