如何在JTable的行中设置文本?

时间:2014-02-24 14:54:21

标签: java swing jtable

我正在尝试使用表格在java JFrame中创建一个程序。 我想从行中保存我的文字。 我把文本放在一个文本文件中,这是有效的。

但我希望将我的文本从我的文本文件中提取到我的表中。 我尝试了很多东西,但没有任何工作。 有人可以帮忙吗?

1 个答案:

答案 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,它对我有用。希望它现在也适合你!