Java 无法将jtable中的文件读取到jTexrArea

Java 无法将jtable中的文件读取到jTexrArea,java,swing,jtable,Java,Swing,Jtable,这是来自以下位置的更新问题:。你知道,我有一个jTable,它包含一个两个文件名,当它在一行中单击时,将被读入Jtextarea。 代码如下: if (evt.getClickCount() == 1) { int row = jTable4.getSelectedRow(); if (row != -1) { String firstColumnValue = jTable4.getModel().getValueAt(row, 0).t

这是来自以下位置的更新问题:。你知道,我有一个jTable,它包含一个两个文件名,当它在一行中单击时,将被读入Jtextarea。 代码如下:

if (evt.getClickCount() == 1) {
        int row = jTable4.getSelectedRow();
        if (row != -1) {
            String firstColumnValue = jTable4.getModel().getValueAt(row, 0).toString();
            String secondColumnValue = jTable4.getModel().getValueAt(row, 1).toString();
            System.out.println(firstColumnValue + " = " + secondColumnValue);
            BufferedReader brComparedFile = null;

            try {
                String strMainFile;
                String strComparedFile;

                BufferedReader brMainFile = new BufferedReader(new FileReader(firstColumnValue));
                brComparedFile = new BufferedReader(new FileReader(secondColumnValue));

                while ((strMainFile = brMainFile.readLine()) != null) {
                    System.out.println("File Acuan");
                    jTextAreaMainFileHighlight.read(brMainFile, null);
                }

                while ((strComparedFile = brComparedFile.readLine()) != null) {
                    System.out.println("File Pembanding");
                    jTextAreaFileComparedFileHighlighter.read(brComparedFile, null);
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (brComparedFile != null) {
                        brComparedFile.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
假设,我的java项目位于名为final_-exam的文件夹中。当JTable中的文件位于期末考试文件夹中时,它用于将文件读入JtextArea。但当不在期末考试文件夹中时,例如文件名为a.java,异常为:java.io.FileNotFoundException:a.java系统无法找到指定的文件。 我的目标是:我的应用程序始终可以读取文件,无论该文件位于何处

有人能帮忙吗

EDIT
这是我如何创建表的代码:

 StringBuilder namaFileUtama = new StringBuilder(); // name of main file
 for (final JCCDFile file : files) {
 JCCDFile temp;
 temp = files[0]; 
 String name = temp.getName();
 String enemy = namaFileUtama.toString();
 DefaultTableModel models = (DefaultTableModel) Main_Menu.jTable4.getModel();
            List<ReportMomentOfTruth> theListRMOT = new ArrayList<ReportMomentOfTruth>();
            ReportMomentOfTruth rmot = new ReportMomentOfTruth();
            rmot.setNameOfMainFile(name);
            rmot.setNameOfComparingFile(enemy);
            theListRMOT.add(rmot);

            for (ReportMomentOfTruth reportMomentOfTruth : theListRMOT) {
                models.addRow(new Object[]{
                    reportMomentOfTruth.getNameOfMainFile(),
                    reportMomentOfTruth.getNameOfComparingFile(),});
            }
我的目标是:我的应用程序始终可以读取文件,无论该文件位于何处

首先,对于这个用例,只将文件名保存到表中是没有用的

相反,您可以将文件作为文件对象保存到表中,这样无论文件位于何处,您都可以从文件对象获取路径。可以创建自定义单元渲染器以仅渲染文件名

否则,我看不出还有什么其他方法可以从任何地方读取文件,正如您所说,仅从文件名读取

在不了解如何实际将文件名加载到表中的情况下,我可能会建议使用JFileChooser

下面是一个将文件作为文件对象保存到表中的示例。对于本例,您需要填写几个文件名

import java.awt.Component;
import java.io.File;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class FileRendererDemo {
    private static String filePath1 = " [ Enter a valid file path here ]";
    private static String filePath2 = " [ Enter a valid file path here ]";

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                File file1 = new File(filePath1);
                File file2 = new File(filePath2);
                String[] cols = {"file 1", "file 2"};
                DefaultTableModel model = new DefaultTableModel(cols, 0);
                model.addRow(new File[] {file1, file2});
                model.addRow(new File[] {null, null});
                model.addRow(new File[] {null, null});
                JTable table = getTable(model);
                JOptionPane.showMessageDialog(null, table);
            }
        }); 
    }

    private static JTable getTable(TableModel model) {
        final JTable table = new JTable(model) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    int row = table.getSelectedRow();
                    if (row != -1) {
                        System.out.println("file 1 - " + table.getValueAt(row, 0));
                        System.out.println("file 2 - " + table.getValueAt(row, 1));
                    }
                }   
            }
        });
        table.setDefaultRenderer(Object.class, new FileCellRenderer());
        return table;
    }

    private static class FileCellRenderer extends DefaultTableCellRenderer {
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            JLabel comp = (JLabel) super.getTableCellRendererComponent(table,
                    value, isSelected, hasFocus, row, column);
            File file = (File)value;
            if (file != null) {
                String fileName = (String)((File)value).getName();
                comp.setText(fileName);
            }
            return comp;
        }
    }
}

提出了18个问题。没有一个答案被接受。您显然不感谢您收到的帮助,因此我将跳过此问题。请访问了解有关StackOverflow的更多信息。它是如何工作的?