Java 无法将jtable中的文件读取到jTexrArea
这是来自以下位置的更新问题:。你知道,我有一个jTable,它包含一个两个文件名,当它在一行中单击时,将被读入Jtextarea。 代码如下: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
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的更多信息。它是如何工作的?