我正在尝试使用表格在java JFrame中创建一个程序。 我想从行中保存我的文字。 我把文本放在一个文本文件中,这是有效的。
但我希望将我的文本从我的文本文件中提取到我的表中。 我尝试了很多东西,但没有任何工作。 有人可以帮忙吗?
答案 0 :(得分:1)
'或CEO'如果您逐行将文本存储在文件中,例如:
tester.txt:
Star Wars
Star Trek
The Lord of The Rings
然后你可以逐行阅读它,当你读了足够的行时,在表格中添加一行。为了向现有表添加行,我相信您确实需要使用模型,或者如果从新创建,则事先准备数据然后创建。以下是使用上述txt文件的粗略示例:
public class SO {
public static void main(String[] args) {
//Desktop
Path path = Paths.get(System.getProperty("user.home"), "Desktop", "tester.txt");
//Reader
try (BufferedReader reader = new BufferedReader(new FileReader(path.toFile()))){
Vector<String> row = new Vector<String>();
//Add lines of file
int numOfCellsInRow = 3; //Num of cells we want
int count = 0;
while (count < numOfCellsInRow){
row.addElement(reader.readLine());
count++;
}
//Column names
Vector<String> columnNames = new Vector<String>();
columnNames.addElement("Column One");
columnNames.addElement("Column Two");
columnNames.addElement("Column Three");
Vector<Vector<String>> rowData = new Vector<Vector<String>>();
rowData.addElement(row);
//Make table
JTable table = new JTable(rowData, columnNames);
//How you could add another row by drawing more text from the file,
//here I have just used Strings
//Source: http://stackoverflow.com/questions/3549206/how-to-add-row-in-jtable
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(new Object[]{"Darth Vader", "Khan", "Sauron"});
//Make JFrame and add table to it, then display JFrame
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}
}
}
有两点需要注意,首先我使用了矢量,但由于我认为可以加速问题所以不鼓励使用,所以你可能想要研究这些问题。第二个主要问题是文件中的文本。只有了解您打算如何存储文本,我们才能知道如何将其成功读回到表中。希望这个例子可以指出你正确的方向。
修改强>
关于您重新发布的代码,首先我做了最后的决定:
final Path path = Paths.get(System.getProperty("user.home"), "Desktop", "File.txt");
然后更改了您的侦听器方法,通过单击保存按钮,根据您创建的文件获取文本输入:
btnGetFile.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//This prevents exception
if(!Files.exists(path)){//If no file
JOptionPane.showMessageDialog(null, "File does not exist!");//MSg
return;//End method
}
/*changed this bit so that it reads the data and
* should then add the rows
*/
try (BufferedReader reader = new BufferedReader(new FileReader(path.toFile()))){
String line;
while((line = reader.readLine()) != null){//Chek for data, reafLine gets first line
Vector<String> row = new Vector<String>();//New Row
row.addElement(line);//Add first line
int numOfCellsInRow = 3; //Num of cells we want
int count = 0;
//We only want 2 because we got the first element at loop start
while (count < (numOfCellsInRow - 1)){
row.addElement(reader.readLine());
count++;
}
model.addRow(row);//Add rows from file
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
添加了评论以尝试解释发生了什么。
通过将文件中的行添加到JTable,它对我有用。希望它现在也适合你!