Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Jtable中添加行_Java_Swing_Vector_Jtable_Abstracttablemodel - Fatal编程技术网

Java 如何在Jtable中添加行

Java 如何在Jtable中添加行,java,swing,vector,jtable,abstracttablemodel,Java,Swing,Vector,Jtable,Abstracttablemodel,实际上,我正在制作一个程序,它接受.properties文件并在GUI中显示值。我已经完成了阅读和写作。现在,我不知道如何实现这个添加/删除行功能。我想在运行时添加一行。我正在使用抽象表如何添加和删除行 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io

实际上,我正在制作一个程序,它接受.properties文件并在GUI中显示值。我已经完成了阅读和写作。现在,我不知道如何实现这个添加/删除行功能。我想在运行时添加一行。我正在使用抽象表如何添加和删除行

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

public class StackoverflowStuff implements TableModelListener {

    public static void main(String[] args) {
        Vector<Vector> data = new Vector<>();
        String strState[] = new String[2];
        strState[0] = "Property";
        strState[1] = "value";
//        Vector<String> columnNames = new Vector<>();
        Vector<String> columnNames = new Vector<String>(Arrays.asList(strState));

        String line;
        try {
            FileInputStream fis = new FileInputStream("C:/properties/spanish.properties");
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            StringTokenizer st1 = new StringTokenizer(br.readLine(), "=");

            while (st1.hasMoreTokens()) {
                Vector row = new Vector();
                row.addElement(st1.nextToken());
                data.add(row);
            }
            while ((line = br.readLine()) != null) {
                if (line.contains("###") && (line.contains("#"))) {
                    continue;
                }
                StringTokenizer st2 = new StringTokenizer(line, "=");
                while (st2.hasMoreTokens()) {
                    Vector row1 = new Vector();
                    row1.addElement(st2.nextToken());
                    data.add(row1);

                }
                System.out.println("Selected ::  " + data);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
//        final int rows = data.size();
//        System.out.println("Selected ::  " + data.size());
//        final int columns = 2;
//        for (int i = 0; i < columns; i++) {
//            int dataas;
//            dataas = data.size() - 1;
//            System.out.println("Selected ::  " + dataas);
//            if (dataas % 2 == 0) {
//                columnNames.add("Property");
//            } else {
//                columnNames.add("Value");
//            }
//        }

//        for (int i = 0; i < rows; i++) {
//            Vector row = new Vector();
//            for (int j = 0; j < columns; j++) {
//                row.add(j);
//            }
//            data.add(row);
//        }
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        final JTable table = new JTable(model);
        JButton saveBtn = new JButton("Save");

        JScrollPane jsPane;
        jsPane = new JScrollPane(table);
        JPanel panel = new JPanel();
        panel.add(jsPane, BorderLayout.CENTER);
        panel.add(saveBtn);
        JButton addRowbtn = new JButton("Add Row");
        panel.add(addRowbtn, BorderLayout.PAGE_START);
        try {
            addRowbtn.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {

//                    myModel.setValueAt(table, table.getRowCount() + 1, 0);
//                    myModel.setValueAt(table, table.getRowCount(), 1);
                    System.out.println("sadasdasd");

                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            saveBtn.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {

                    try {
                        BufferedWriter bfw = new BufferedWriter(new FileWriter("C:/properties/cwqesdb.properties"));
                        for (int i = 0; i < table.getRowCount(); i++) {
                            bfw.newLine();
                            for (int j = 0; j < 1; j++) {
                                if (j == 0) {
                                    bfw.write((String) (table.getValueAt(i, j)));
                                    System.out.println("Selected data: MouseDragged ::  " + table.getValueAt(i, j));

                                } else {
//                                    bfw.write((String) (table.getValueAt(i, j)));
//                                    bfw.write("=");
//                                    System.out.println("Selected data: MouseDragged ::  " + table.getValueAt(i, j));
                                }
                            }

                        }
                        bfw.flush();
                        bfw.close();
                        JOptionPane.showMessageDialog(null, "File Successfully Saved.");
                    } catch (IOException ex) {

                    }

                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JOptionPane.showMessageDialog(null, panel);
    }

    @Override
    public void tableChanged(TableModelEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
“请告诉我如何从模型中取出文件读取内容”

在模型中,有两个
向量,一个用于数据,一个用于列。将数据读入向量,然后用它们创建一个
DefaultTableModel
。尽管可能会把你弄得一团糟,但对于数据,你使用的是一个向量。数据应该是二维的,因此您需要一个
向量
,就像您要使用数组作为数据一样,它应该是
Object[][]数据
。因此,您可能希望将实现更改为

Vector<Vector> data = new Vector<>();
Vector<String> columnName = new Vector();
...
while ((line = reader.nextLine()) != null) {
    Vector row = new Vector();
    // tokenize and add the `row`
    data.add(row);
}

DefaultTableModel model = new DefaultTableModel(data, columnsNames);
JTable table = new JTable(model);
您应该在循环外部创建行向量时,为每个标记添加新行,并在循环内部添加标记,然后在循环外部添加行

Vector<Vector> data = new Vector();
while (... ) {
    Vector row = new Vector();
    while(...) { 
       String data = ...
       row.add(data);
    }
    data.add(row);
}
矢量数据=新矢量();
而(…){
向量行=新向量();
而(…){
字符串数据=。。。
行。添加(数据);
}
添加数据(行);
}

旁白:在表模型的构造函数中有很多工作要做。我会在外面做所有这些事情,只需向模型的构造函数传递一些数据结构1。fireTableChanged是addRow中的错误通知程序,2。getValueAt包含奇怪的代码行,因此我在您的模型实现中没有看到任何会导致您不使用
DefaultTableModel
,除了我已经建议从模型中删除的文件读取内容。那么,有谁能纠正此代码呢。我是初学者。@peeskillet请告诉我如何从模型中取出文件读取内容。谢谢@peeskillet,但现在我遇到了一个不兼容类型的错误:在将StringTokenizer保存到Vector时无法将字符串转换为Vector。似乎您忘了为每行创建新的
Vector
,并将该
Vector
添加到Vector。您可能试图将字符串添加到
Vector
,如下所示。我想将这些值保存为例如name=jawad,我想阅读这一行并将“name”保存在第一列,将“jawad”保存在第二列。我在链接到pastebin时遇到问题。用一个文件片段编辑你的帖子我想你错过了我说我链接到pastebin有问题的那部分。用文件片段编辑原始帖子
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class StackoverflowStuff {

    public static void main(String[] args) {
        Vector<Vector> data = new Vector<>();
        Vector<String> columnNames = new Vector<>();

        final int rows = 10;
        final int columns = 4;
        for (int i = 0; i < columns; i++) {
            columnNames.add("Col");
        }

        for (int i = 0; i < rows; i++) {
            Vector row = new Vector();
            for (int j = 0; j < columns; j++) {
                row.add(j);
            }
            data.add(row);
        }

        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JOptionPane.showMessageDialog(null, new JScrollPane(table));
    }  
}
Vector<Vector> data = new Vector();
while (... ) {
    while(...) {
       Vector row = new Vector();
       String data = ...
       row.add(data);
       data.add(row);
    }
}
Vector<Vector> data = new Vector();
while (... ) {
    Vector row = new Vector();
    while(...) { 
       String data = ...
       row.add(data);
    }
    data.add(row);
}