Java - 使用 JFileChooser 将字符串路径存储在表中,获取设置方法?

标签 java void jfilechooser

我正在设计一个界面,用户可以在其中使用 JFileChooser 选择文件(通过 JButton 启动)并将其字符串路径存储在表中,以供以后使用。我用于选择文件的代码包含在类 TheHandler 中,我的表格位于类 FilePanel 中。我将 filePath 的值定向到 FilePanel 类的 tablePath,以便我可以将字符串存储在表中。

但是我的问题是 tablePath 返回 null,我认为这是因为:

1) filePath 包含在 void 方法中

2) 在用户选择文件之前为tablePath赋予一个值

或 1) 和 2) 的组合。所以我的问题是如何提取 filePath 的值,以便在用户选择文件后可以由 tablePath 获取它?

我正在考虑 get 和 set 方法,但我刚刚开始学习这些方法,从我遇到的示例来看,我认为我需要在 actionPerformed(ActionEvent event) 中使用它们 构造函数,但如果是这样的话,我完全不知道如何做到这一点。任何帮助将不胜感激。

TheHandler 类:

public static class TheHandler implements ActionListener {
    String filePath;

    public void actionPerformed(ActionEvent event) {
        Component parent = null;
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("TIFF Images", "tif", "tiff");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(parent);

        filePath = chooser.getSelectedFile().toString();
        //System.out.println(filePath);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            ImagePlus picture = IJ.openImage(filePath);
            picture.show();
        }
    }
}

FilePanel 类:

public class FilePanel extends JPanel {
    public FilePanel() {
        setLayout(new GridLayout(1, 0));
        TheHandler thePath = new TheHandler();
        String tablePath = thePath.filePath;

        System.out.println(filePaths);    // outputs null, this line runs before file is chosen?

        String col[] = {"Loaded TIFF Files"};
        String[] tiffFiles = {filePaths, filePaths};   // Vector or list may be more useful?
        DefaultTableModel tableModel = new DefaultTableModel(col, 0);
        tableModel.addRow(tiffFiles);
    }
}

最佳答案

你的TheHandler是一个纯粹而简单的ActionListener类,它的主要方法,即重写的actionPerformed方法,只有在添加了The Handler的组件(无论是JButton、JMenuItem还是其他什么)触发其被调用时才会被调用。您似乎正在创建此类的一个实例,但我没有看到您将其添加到任何采用 ActionListener 的组件中,因此它的一个字段 filePath 将保持为 null 也就不足为奇了。

如果你想以更好的方式使用它,那么将它用作 ActionListener 应该被使用。将其添加到 JButton 或 JMenuItem,并让它在事件指示应执行操作时执行其操作。如果您希望收到 filePath 字段不再为空的通知,您可以使用 SwingPropertyChangeSupport 将其设为“绑定(bind)属性”。

选项二是创建一个方法来执行 TheHandler 的 actionPerformed 中代码的“主要部分”,并在需要时直接调用该方法。您甚至可以让 TheHandler 也调用它,这样它就可以达到双重目的。

例如,

public static class TheHandler implements ActionListener{
    String filePath;        

    public void actionPerformed(ActionEvent event){              
        String innerPath = null;
        innerPath = getFilePath();
        if (innerPath != null) {
            filePath = innerPath;
            ImagePlus picture = IJ.openImage(filePath); 
            picture.show();                                                                             
        }               
    }

    public String getFilePath() {
        String innerFilePath = null;
        Component parent = null; // better to avoid this
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("TIFF Images", "tif","tiff");
        chooser.setFileFilter(filter);      
        int returnVal = chooser.showOpenDialog(parent);   
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            innerFilePath = chooser.getSelectedFile().toString();                                               
        }  
        return innerFilePath;
    }
}

然后您的其他类可以直接调用 TheHandler 的 getFilePath() 方法。

关于Java - 使用 JFileChooser 将字符串路径存储在表中,获取设置方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779145/

相关文章:

java - 这个文件操作设计模式的名称是什么?

c++ - void指针 'this'是什么意思?

java - JFileChooser 无法设置默认选择

c - C中void函数的return语句

java - Mac 上的 JFileChooser 看不到中文字符命名的文件?

java - 使用 JFileChooser 选择 txt 文件并使其出现在 JTextField 上是行不通的

java - 如何查找特定的元标记

java - 如何防止在 CXF Web 服务客户端中生成 JAXBElement<String>?

java - 如何从Android连接到Spring Websocket

asynchronous - Dart - 区分同步和异步 void 回调