Java 如果选择了新数据文件,如何让JTable知道它应该显示新数据

Java 如果选择了新数据文件,如何让JTable知道它应该显示新数据,java,swing,events,jtable,Java,Swing,Events,Jtable,我有一个菜单项,可以打开一个文件选择器对话框。在该对话框中,应选择并打开一个文件。如果文件有效,则应将其中的数据添加到主框架内容窗格上的表中。我能够实现所有功能,但在检查完数据文件后,我可以将数据文件从OpenFile发送到MainWindow。 代码示例: public class MainWindow extends JFrame { MainWindow() { //setting frame size, visibility, etc. JMenu

我有一个菜单项,可以打开一个文件选择器对话框。在该对话框中,应选择并打开一个文件。如果文件有效,则应将其中的数据添加到主框架内容窗格上的表中。我能够实现所有功能,但在检查完数据文件后,我可以将数据文件从OpenFile发送到MainWindow。 代码示例:

public class MainWindow extends JFrame {
    MainWindow() {
        //setting frame size, visibility, etc.
        JMenu m = new JMenu("File");
        JMenuItem mi = new JMenuItem("Open");
        mi.addActionListener(new OpenFile());
        m.add(mi);
        JMenuBar mb = new JMenuBar();
        mb.add(m);
        setJMenuBar(mb);
        JTable table = new JTable();
    }
}

class OpenFile implements ActionListener {
    File file;
    @Override
    public void actionPerformed(ActionEvent e) {
        //opening file chooser dialog, getting file, checking that file is valid
    }
}

TableModel
负责在表的内容或结构发生更改时向表返回通知,使表有机会决定如何最好地更新自身以满足更改的要求

看看,尤其是

已更新

为了能够操作
表格模型
,您需要对其进行引用。最终的解决方案将取决于您如何实现表模型,但基本概念是相同的

public class OpenFile implements ActionListener {

    private YourTableModel model;

    public OpenFile (YourTableModel model) {
        this.model = model;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //...
        model.updateModelWithContent(...); // Or what ever method you provide
    }

传递给该类的模型应与提供给表的模型相同。

感谢您的回复,但我问了如何在mi激发ActionEvent之后立即从OpenFile类获取对MainWindow的文件引用。从问题中可能不清楚表格没有数据可显示。您需要一个
TableModel
的引用,您可以用它来填充文件中的内容……如何实现这一点?通过OpenFile类的构造函数传递此引用?我对填充表格不是很感兴趣。我所需要的只是一个大概的想法,如何从OpenFile获取一个ref,在本例中是一个来自OpenFile的文件ref,从一些侦听器到一个完全不同的位置,在本例中是到MainWindow类。有可能吗?还是有其他方法可以做到这一点?