导入的数据仅显示在JTable(Java)的第一列中

Delirium_EA;

我试图制作一个简单的GUI,可以在其中添加一个人的名字/姓氏及其出生日期。将数据添加到JTable之后,我可以将其保存在TxT文件中,然后再次将其加载回JTable中。

保存数据的部分:

private void saveListener(){
    jb1.addActionListener(e -> {
        JFileChooser fileChooser = new JFileChooser();
        int returnVal = fileChooser.showSaveDialog(PeopleGUI.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {     // Datei Explorer
            try {
                File file = fileChooser.getSelectedFile();
                PrintWriter o = new PrintWriter(file); // o steht für Output

                for (int col = 0; col < peopleModel.getColumnCount(); col++) {
                    o.print(peopleModel.getColumnName(col) + ";");
                }

                o.println("");

                for (int row = 0; row < peopleModel.getRowCount(); row++) {
                    for (int col = 0; col < peopleModel.getColumnCount(); col++) {
                        o.println(peopleModel.getValueAt(row, col));
                    }
                }

                o.close();
                // Output in der Konsole
                System.out.println("Success!");
            } catch (IOException c) {
                c.printStackTrace();
            }
        }
    });
}

加载数据的部分:

public void loadListener() {
    jb2.addActionListener(e -> {
    final JFileChooser fileChooser = new JFileChooser();
    int response = fileChooser.showOpenDialog(PeopleGUI.this);
    if (response == JFileChooser.APPROVE_OPTION) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("jlist.txt"));

            // Erste Linie sind Kolonnen Beschriftungen
            String firstLine = br.readLine().trim();
            String[] columnsName = firstLine.split(";");
            DefaultTableModel model = (DefaultTableModel) peopleList.getModel();
            model.setColumnIdentifiers(columnsName);

            // Daten vom TxT holen
            Object[] tableLines = br.lines().toArray();

            // Reihen mit Daten
            for (int i = 0; i < tableLines.length; i++) {
                String line = tableLines[i].toString().trim();
                String[] dataRow = line.split("/");
                model.addRow(dataRow);
                }
            }
            catch (IOException b) {
                b.printStackTrace();
            }
        }
    });
}

问题是,导入的数据仅显示在第一行中:

这就是现在的样子

现在有人解决此问题吗?

提前致谢!

b。吉拉斯:

问题是如何将数据保存到文件中

for (int row = 0; row < peopleModel.getRowCount(); row++) {
    for (int col = 0; col < peopleModel.getColumnCount(); col++) {
        o.println(peopleModel.getValueAt(row, col));
    }
}

在这里,您将JTable的每个单元格保存在新行中。您想将每行保存在新行中,并用/分隔值

for (int row = 0; row < peopleModel.getRowCount(); row++) {
    String r = "";
    for (int col = 0; col < peopleModel.getColumnCount(); col++) {
        r += peopleModel.getValueAt(row, col);
        if (col < peopleModel.getColumnCount() - 1) {
            r += "/";
        }
    }
    o.println(r);
}

编辑:如@camickr所述,使用StringJoiner更好

for (int row = 0; row < peopleModel.getRowCount(); row++) {
    StringJoiner stringJoiner = new StringJoiner("/");
    for (int col = 0; col < peopleModel.getColumnCount(); col++) {
        stringJoiner.add(peopleModel.getValueAt(row, col).toString());
    }
    o.println(stringJoiner.toString());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

grep在第一列中搜索数据

仅具有特定列的可选JTable和/或仅从一列获取数据

在JSP中,如何在第一列中显示奇数数据,在第二列中显示偶数数据?

使用dplyr从数据导入中仅保留一个唯一列

Vue.js数据表仅在第一列中显示数据

genfromtxt更改dtype后仅导入第一列

将功能设为数据框中的第一列

如何仅将此网站HTML表的第一列和href链接剪贴到pandas数据框中?

如何使用Pandas读取不包含标题的CSV文件,仅捕获第一列中的数据并执行删除操作?

仅折叠R中数据帧的第一列,其余列数据保持不变

如何在熊猫数据框中隐藏显示序列号的第一列

如何仅在第一列以及包含单词“ Total”作为菜单标题的列中过滤导入的数据

仅显示数据中的第一个元素

如何:第一列中包含可折叠JTree的JTable,其他列中包含数据的JTable?

如何在一列中仅显示一条数据,另一列中列出多行

如何在JTable中仅使一列可编辑

在Java中的jtable中设置下一列的数据

如何在表中仅显示结果的一列

PyQt5 QTableWidget仅显示第一行和第一列

替换CSV第一列中的数据

如何更改文件中的第一列数据?

从数据表中删除第一列

使用上传的数据仅删除 R 中的第一列

JTable 显示所有记录(数据),就在一列中?

分组后数据框中的第一列丢失

如何在 ListView 中仅显示一列数据?

如何将txt文件导入JTable并根据文件的行数使第一列自动递增

从另一列创建一列列表,并在 Pandas 数据框中仅显示唯一值

第一列中的所有数据